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
- ConnectionStringsSection.cs
- DataTrigger.cs
- WeakReferenceEnumerator.cs
- httpstaticobjectscollection.cs
- TryCatchDesigner.xaml.cs
- ZoneMembershipCondition.cs
- ListParaClient.cs
- InputLanguageEventArgs.cs
- InputDevice.cs
- MappingMetadataHelper.cs
- BitmapCodecInfoInternal.cs
- NamedPipeProcessProtocolHandler.cs
- SchemaImporterExtensionElement.cs
- ServiceDefaults.cs
- DrawingContextWalker.cs
- DesignerCategoryAttribute.cs
- FrameworkElement.cs
- SqlFactory.cs
- ProxyGenerationError.cs
- ValidatedControlConverter.cs
- WebCategoryAttribute.cs
- TakeOrSkipWhileQueryOperator.cs
- SerialStream.cs
- LogArchiveSnapshot.cs
- OledbConnectionStringbuilder.cs
- NonBatchDirectoryCompiler.cs
- Renderer.cs
- ServiceAuthorizationElement.cs
- DataObjectEventArgs.cs
- PointLightBase.cs
- ProfileService.cs
- SqlCacheDependency.cs
- SessionPageStateSection.cs
- DragEventArgs.cs
- CfgRule.cs
- UIElementParaClient.cs
- Underline.cs
- documentsequencetextcontainer.cs
- ClientType.cs
- XPathCompileException.cs
- Privilege.cs
- streamingZipPartStream.cs
- PointHitTestResult.cs
- TogglePattern.cs
- CrossContextChannel.cs
- NameValueConfigurationCollection.cs
- PackWebRequestFactory.cs
- JsonFormatReaderGenerator.cs
- AttributeEmitter.cs
- FlowchartDesignerCommands.cs
- HttpHandler.cs
- ToolboxBitmapAttribute.cs
- SerializationTrace.cs
- ToolStripInSituService.cs
- Button.cs
- ReachFixedPageSerializer.cs
- dsa.cs
- JsonWriter.cs
- StdRegProviderWrapper.cs
- DiagnosticsConfiguration.cs
- CreateUserWizardStep.cs
- CompositeFontInfo.cs
- Floater.cs
- AuthorizationRule.cs
- GridViewSortEventArgs.cs
- PerformanceCounterLib.cs
- WebControlsSection.cs
- SchemaTypeEmitter.cs
- EdmItemCollection.OcAssemblyCache.cs
- BezierSegment.cs
- InvalidEnumArgumentException.cs
- AudienceUriMode.cs
- ProfileEventArgs.cs
- GeometryGroup.cs
- DiscoveryRequestHandler.cs
- WebPartVerbsEventArgs.cs
- XmlSchemaDocumentation.cs
- OpCodes.cs
- ProjectionRewriter.cs
- FrameworkElementFactoryMarkupObject.cs
- DefaultAssemblyResolver.cs
- MasterPageParser.cs
- SchemaContext.cs
- XmlCharCheckingWriter.cs
- StyleBamlTreeBuilder.cs
- ImageAnimator.cs
- CodeAccessSecurityEngine.cs
- PersonalizationProvider.cs
- StaticDataManager.cs
- ReflectPropertyDescriptor.cs
- smtpconnection.cs
- ClassData.cs
- AtlasWeb.Designer.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- ProcessHostConfigUtils.cs
- SymbolEqualComparer.cs
- DataFormats.cs
- TextDecorations.cs
- SqlFormatter.cs
- DependencyPropertyKey.cs