Code:
/ DotNET / DotNET / 8.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
- ConfigXmlComment.cs
- Material.cs
- WindowCollection.cs
- SecurityToken.cs
- HyperLink.cs
- AlignmentYValidation.cs
- validation.cs
- PeerUnsafeNativeCryptMethods.cs
- AnonymousIdentificationSection.cs
- webclient.cs
- panel.cs
- GridErrorDlg.cs
- TriState.cs
- BaseTypeViewSchema.cs
- ETagAttribute.cs
- Attributes.cs
- SqlError.cs
- WebPartZoneAutoFormat.cs
- HtmlInputImage.cs
- ColumnWidthChangingEvent.cs
- WebPartTracker.cs
- WmlMobileTextWriter.cs
- ipaddressinformationcollection.cs
- AssociationSetMetadata.cs
- DependencyPropertyKind.cs
- BaseDataBoundControl.cs
- DrawingContextWalker.cs
- FixedTextSelectionProcessor.cs
- Line.cs
- Canvas.cs
- StrongNameKeyPair.cs
- AddInAdapter.cs
- RuntimeHelpers.cs
- StubHelpers.cs
- Soap.cs
- EntityCommandExecutionException.cs
- ObjectPersistData.cs
- ResolvedKeyFrameEntry.cs
- ErrorLog.cs
- FormViewUpdatedEventArgs.cs
- SafeRightsManagementHandle.cs
- StyleTypedPropertyAttribute.cs
- ForwardPositionQuery.cs
- MetadataImporter.cs
- SettingsAttributes.cs
- TypeElement.cs
- SiteMapNodeItemEventArgs.cs
- WebOperationContext.cs
- FlowSwitchLink.cs
- __Filters.cs
- WebPartCatalogAddVerb.cs
- StringFormat.cs
- DetailsViewPageEventArgs.cs
- SimpleNameService.cs
- ConnectionManagementElement.cs
- AuthenticatingEventArgs.cs
- ComponentEvent.cs
- Int32CollectionConverter.cs
- StackBuilderSink.cs
- TypedElement.cs
- WorkflowServiceOperationListItem.cs
- ScriptManagerProxy.cs
- ProtocolsConfiguration.cs
- InputReportEventArgs.cs
- SafeSystemMetrics.cs
- GroupItemAutomationPeer.cs
- XDeferredAxisSource.cs
- NavigationProperty.cs
- ConsoleKeyInfo.cs
- DataContractAttribute.cs
- AuthenticatedStream.cs
- DocumentGridPage.cs
- GlyphRun.cs
- TableStyle.cs
- ListBoxChrome.cs
- DesignSurfaceManager.cs
- Rotation3D.cs
- GAC.cs
- ReceiveActivityDesigner.cs
- EncodingDataItem.cs
- OutputCacheSection.cs
- TimeEnumHelper.cs
- SqlXmlStorage.cs
- SettingsPropertyValueCollection.cs
- StateWorkerRequest.cs
- WebPartConnectionsCancelVerb.cs
- DataSourceXmlSubItemAttribute.cs
- EntityCollection.cs
- Quad.cs
- clipboard.cs
- Polyline.cs
- BuildResultCache.cs
- UnsafeNativeMethods.cs
- BitmapEffectInputData.cs
- ImageListUtils.cs
- EntityCommandExecutionException.cs
- ImmComposition.cs
- SnapLine.cs
- LoginUtil.cs
- KnowledgeBase.cs