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
- TextEditorSpelling.cs
- SqlGenericUtil.cs
- WebPartDisplayModeCancelEventArgs.cs
- EdmFunction.cs
- DefinitionBase.cs
- ReplyChannel.cs
- WebServiceClientProxyGenerator.cs
- StatusBarPanel.cs
- XmlDictionaryWriter.cs
- DataGridViewCellPaintingEventArgs.cs
- ValidationEventArgs.cs
- IndividualDeviceConfig.cs
- SendActivity.cs
- DiscoveryClientReferences.cs
- TypeHelper.cs
- AnimationStorage.cs
- EntityContainer.cs
- Metadata.cs
- CroppedBitmap.cs
- ClipboardProcessor.cs
- DbBuffer.cs
- HttpGetServerProtocol.cs
- CodeMemberProperty.cs
- Column.cs
- XmlChildEnumerator.cs
- CharConverter.cs
- StoreContentChangedEventArgs.cs
- WeakReference.cs
- ClientOptions.cs
- ParentQuery.cs
- CollectionsUtil.cs
- EntityKeyElement.cs
- DetailsViewAutoFormat.cs
- InplaceBitmapMetadataWriter.cs
- InputBuffer.cs
- SafeNativeMethods.cs
- DataServiceException.cs
- HtmlInputImage.cs
- StateManager.cs
- SimpleExpression.cs
- WebBrowsableAttribute.cs
- TripleDESCryptoServiceProvider.cs
- PaginationProgressEventArgs.cs
- _BaseOverlappedAsyncResult.cs
- WindowsHyperlink.cs
- SafeTokenHandle.cs
- UpdateCommand.cs
- ClassGenerator.cs
- ButtonFieldBase.cs
- DesignerActionItemCollection.cs
- MSG.cs
- invalidudtexception.cs
- LogStore.cs
- ListItemCollection.cs
- XPathNavigatorKeyComparer.cs
- ConfigurationPermission.cs
- KnownBoxes.cs
- MSAANativeProvider.cs
- SystemIcmpV6Statistics.cs
- DriveNotFoundException.cs
- ProcessModelSection.cs
- InputLanguageProfileNotifySink.cs
- TextMarkerSource.cs
- CompiledQueryCacheKey.cs
- BypassElement.cs
- SlipBehavior.cs
- WebSysDisplayNameAttribute.cs
- AccessedThroughPropertyAttribute.cs
- PersonalizationProviderHelper.cs
- contentDescriptor.cs
- PrintEvent.cs
- Misc.cs
- RoleManagerSection.cs
- FormatConvertedBitmap.cs
- XmlDictionaryWriter.cs
- ComPlusServiceHost.cs
- XmlNotation.cs
- WinFormsUtils.cs
- PageParserFilter.cs
- SemanticAnalyzer.cs
- CodeArrayCreateExpression.cs
- FastEncoder.cs
- TrackingDataItemValue.cs
- TabletDevice.cs
- TreeViewItemAutomationPeer.cs
- TextRangeEdit.cs
- XpsManager.cs
- Button.cs
- KnownTypes.cs
- XmlNodeWriter.cs
- SR.cs
- StylusPointProperty.cs
- XmlNotation.cs
- GeometryModel3D.cs
- CustomErrorsSection.cs
- DetailsViewRowCollection.cs
- ContainerActivationHelper.cs
- CallSiteBinder.cs
- AuthorizationContext.cs
- ReadContentAsBinaryHelper.cs