Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / WebForms / System / Web / UI / Design / TypeGenericEnumerableViewSchema.cs / 2 / TypeGenericEnumerableViewSchema.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Web.UI.Design {
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Reflection;
///
/// Represents a View's schema based on a generic IEnumerable. The
/// strongly-typed row type is determined based on the generic argument
/// of the enumerable.
///
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand, Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)]
internal sealed class TypeGenericEnumerableViewSchema : BaseTypeViewSchema {
public TypeGenericEnumerableViewSchema(string viewName, Type type)
: base(viewName, type) {
Debug.Assert(TypeSchema.IsBoundGenericEnumerable(type), String.Format(CultureInfo.InvariantCulture, "The type '{0}' does not implement System.Collections.Generic.IEnumerable, or the argument T is not bound to a type.", type.FullName));
}
protected override Type GetRowType(Type objectType) {
// Get the IEnumerable declaration
Type enumerableType = null;
if (objectType.IsInterface && objectType.IsGenericType && objectType.GetGenericTypeDefinition() == typeof(IEnumerable<>)) {
// If the type already is IEnumerable, that's the interface we want to inspect
enumerableType = objectType;
}
else {
// Otherwise we get a list of all the interafaces the type implements
Type[] interfaces = objectType.GetInterfaces();
foreach (Type i in interfaces) {
if (i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IEnumerable<>)) {
enumerableType = i;
break;
}
}
}
Debug.Assert(enumerableType != null, "Should have found an implementation of IEnumerable");
// Now return the value of the T argument
Type[] genericArguments = enumerableType.GetGenericArguments();
Debug.Assert(genericArguments != null && genericArguments.Length == 1, "Expected IEnumerable to have a generic argument");
// If a type has IsGenericParameter=true that means it is not bound.
if (genericArguments[0].IsGenericParameter) {
Debug.Fail("Expected the type argument to IEnumerable to be bound");
return null;
}
else {
return genericArguments[0];
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SHA512.cs
- SaveFileDialog.cs
- RsaSecurityTokenParameters.cs
- TraceHwndHost.cs
- Calendar.cs
- ToolStripSplitButton.cs
- StreamSecurityUpgradeAcceptorBase.cs
- MruCache.cs
- TextDataBindingHandler.cs
- ActivityInstanceReference.cs
- ItemDragEvent.cs
- RepeaterItem.cs
- AuthorizationSection.cs
- WSDualHttpSecurityElement.cs
- ConfigurationStrings.cs
- MappingModelBuildProvider.cs
- MembershipUser.cs
- DragDeltaEventArgs.cs
- ListItemCollection.cs
- JsonSerializer.cs
- SrgsElementFactoryCompiler.cs
- EncodingInfo.cs
- SQLBytesStorage.cs
- RevocationPoint.cs
- SymDocumentType.cs
- ActivityDefaults.cs
- TraversalRequest.cs
- QualifiedCellIdBoolean.cs
- TimeManager.cs
- IChannel.cs
- DataTableReader.cs
- Properties.cs
- Utilities.cs
- MemoryFailPoint.cs
- UnwrappedTypesXmlSerializerManager.cs
- Base64Encoder.cs
- InputScopeNameConverter.cs
- SByteConverter.cs
- SHA256.cs
- AnonymousIdentificationModule.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- NumberSubstitution.cs
- LateBoundBitmapDecoder.cs
- SystemFonts.cs
- UrlMapping.cs
- AnyAllSearchOperator.cs
- CurrentChangingEventArgs.cs
- ConnectionPoolManager.cs
- EmptyEnumerator.cs
- DataSetUtil.cs
- ToolBar.cs
- PreviewKeyDownEventArgs.cs
- SegmentTree.cs
- SqlInternalConnection.cs
- Transform.cs
- CatalogZoneAutoFormat.cs
- DBSchemaTable.cs
- DocumentOrderQuery.cs
- ReadingWritingEntityEventArgs.cs
- EntityDescriptor.cs
- PathFigure.cs
- StoryFragments.cs
- CellQuery.cs
- MessageDroppedTraceRecord.cs
- ItemCheckedEvent.cs
- TypeConverterHelper.cs
- NotifyParentPropertyAttribute.cs
- ValidatingPropertiesEventArgs.cs
- PolicyVersionConverter.cs
- TypeExtensionSerializer.cs
- Setter.cs
- XPathScanner.cs
- PrintDialog.cs
- ExportOptions.cs
- SetterBase.cs
- WindowsListViewGroup.cs
- Cursor.cs
- XhtmlConformanceSection.cs
- BaseValidator.cs
- ImageIndexConverter.cs
- wmiutil.cs
- StringKeyFrameCollection.cs
- BrowserDefinitionCollection.cs
- AttachedPropertyBrowsableWhenAttributePresentAttribute.cs
- QuaternionIndependentAnimationStorage.cs
- GridErrorDlg.cs
- DeferredSelectedIndexReference.cs
- WindowsSpinner.cs
- TableStyle.cs
- GenericFlowSwitchHelper.cs
- ComponentManagerBroker.cs
- GPPOINTF.cs
- RadioButtonRenderer.cs
- Accessible.cs
- VariantWrapper.cs
- TableLayoutPanel.cs
- StreamGeometry.cs
- ReflectionServiceProvider.cs
- DataBoundControl.cs
- BuildResult.cs