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
- COAUTHIDENTITY.cs
- TableLayoutSettings.cs
- SequentialOutput.cs
- BulletDecorator.cs
- ModelVisual3D.cs
- ProxyFragment.cs
- Keywords.cs
- XmlILIndex.cs
- XD.cs
- RenderCapability.cs
- DataBindEngine.cs
- SimpleRecyclingCache.cs
- CodeMemberEvent.cs
- TextDecorationLocationValidation.cs
- MetadataCache.cs
- CapacityStreamGeometryContext.cs
- XmlAnyElementAttributes.cs
- Mappings.cs
- EventLogTraceListener.cs
- BitmapEffectState.cs
- IdleTimeoutMonitor.cs
- StrokeCollection.cs
- RemotingConfiguration.cs
- BinaryUtilClasses.cs
- ExclusiveTcpTransportManager.cs
- Fonts.cs
- ValueQuery.cs
- BinaryCommonClasses.cs
- AttributeEmitter.cs
- EditorZone.cs
- OleDbPropertySetGuid.cs
- EventWaitHandle.cs
- PropertyValueUIItem.cs
- TargetControlTypeCache.cs
- SerializationAttributes.cs
- BinaryFormatter.cs
- PlanCompilerUtil.cs
- Mappings.cs
- PassportAuthenticationModule.cs
- SchemaAttDef.cs
- XmlnsDefinitionAttribute.cs
- UnsafeNativeMethods.cs
- LocalizeDesigner.cs
- x509utils.cs
- StreamInfo.cs
- EncodingStreamWrapper.cs
- GradientSpreadMethodValidation.cs
- InkSerializer.cs
- _DomainName.cs
- TailCallAnalyzer.cs
- WindowsStatic.cs
- HttpCapabilitiesEvaluator.cs
- KnownIds.cs
- EffectiveValueEntry.cs
- ListenerElementsCollection.cs
- TextRunProperties.cs
- JulianCalendar.cs
- ImmComposition.cs
- PolyLineSegmentFigureLogic.cs
- UnionCqlBlock.cs
- FontConverter.cs
- BindingContext.cs
- NamespaceListProperty.cs
- WindowsEditBox.cs
- FrameSecurityDescriptor.cs
- _AutoWebProxyScriptEngine.cs
- Calendar.cs
- SemaphoreFullException.cs
- NameScope.cs
- ReferencedCollectionType.cs
- ServiceCredentials.cs
- HtmlWindow.cs
- AppDomainFactory.cs
- SequentialOutput.cs
- SymmetricAlgorithm.cs
- RelationalExpressions.cs
- DebugView.cs
- ResourceManager.cs
- DropDownButton.cs
- SafeCryptHandles.cs
- XmlSchemaAttributeGroup.cs
- Package.cs
- TableLayoutCellPaintEventArgs.cs
- _UriTypeConverter.cs
- NamespaceEmitter.cs
- InputMethod.cs
- DetailsViewInsertedEventArgs.cs
- ModuleElement.cs
- TripleDES.cs
- DataRelation.cs
- HttpProfileBase.cs
- AdPostCacheSubstitution.cs
- DesignSurfaceEvent.cs
- FocusWithinProperty.cs
- HttpApplication.cs
- EntityFrameworkVersions.cs
- NetStream.cs
- HandlerElement.cs
- ConsumerConnectionPointCollection.cs
- DifferencingCollection.cs