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
- UnsupportedPolicyOptionsException.cs
- AVElementHelper.cs
- ClusterRegistryConfigurationProvider.cs
- TemplateColumn.cs
- DefaultProxySection.cs
- PageClientProxyGenerator.cs
- LabelExpression.cs
- AttributeQuery.cs
- MembershipValidatePasswordEventArgs.cs
- BadImageFormatException.cs
- SecurityVersion.cs
- InvalidStoreProtectionKeyException.cs
- MetadataArtifactLoaderResource.cs
- XmlAnyAttributeAttribute.cs
- ImageListUtils.cs
- SourceFileBuildProvider.cs
- AsyncPostBackErrorEventArgs.cs
- MultiView.cs
- InvalidAsynchronousStateException.cs
- SafeEventLogWriteHandle.cs
- ExpressionEditorAttribute.cs
- UnsafeNativeMethods.cs
- MsmqInputChannel.cs
- ObjectQueryProvider.cs
- PageCache.cs
- MethodToken.cs
- TypefaceMap.cs
- AssemblyInfo.cs
- TemplateParser.cs
- LogEntryHeaderSerializer.cs
- EventMappingSettings.cs
- Icon.cs
- ModuleBuilderData.cs
- TextParagraphProperties.cs
- FlowDecision.cs
- UserNameSecurityTokenAuthenticator.cs
- EncryptedKeyIdentifierClause.cs
- PathFigureCollection.cs
- WsdlBuildProvider.cs
- TextChangedEventArgs.cs
- Slider.cs
- ObjectDataSourceSelectingEventArgs.cs
- ReferenceConverter.cs
- ThicknessConverter.cs
- FormsAuthenticationUser.cs
- ServiceParser.cs
- ElementHostAutomationPeer.cs
- EntityProviderFactory.cs
- CacheRequest.cs
- HyperLinkField.cs
- UserPreferenceChangedEventArgs.cs
- baseaxisquery.cs
- KeyValuePair.cs
- AsynchronousChannel.cs
- WrappingXamlSchemaContext.cs
- RequestQueue.cs
- ContainerVisual.cs
- DefaultEventAttribute.cs
- RouteParametersHelper.cs
- _LocalDataStoreMgr.cs
- RenderTargetBitmap.cs
- TypeResolvingOptions.cs
- AppModelKnownContentFactory.cs
- DataBindingCollectionEditor.cs
- DispatchChannelSink.cs
- SqlNotificationEventArgs.cs
- CodeDirectoryCompiler.cs
- NavigateEvent.cs
- CommandID.cs
- ProviderConnectionPointCollection.cs
- SoapAttributeAttribute.cs
- AppModelKnownContentFactory.cs
- BamlRecordReader.cs
- DeclaredTypeElementCollection.cs
- PeerNodeAddress.cs
- DataColumnMappingCollection.cs
- SecurityIdentifierElementCollection.cs
- ModuleConfigurationInfo.cs
- IdnElement.cs
- PointKeyFrameCollection.cs
- ContractComponent.cs
- ZipPackage.cs
- AmbientProperties.cs
- SqlMethodAttribute.cs
- UDPClient.cs
- ButtonBase.cs
- HtmlForm.cs
- SubordinateTransaction.cs
- RowToParametersTransformer.cs
- MemoryPressure.cs
- ObjectAssociationEndMapping.cs
- ICollection.cs
- DataControlField.cs
- MsdtcClusterUtils.cs
- CodeStatementCollection.cs
- IISUnsafeMethods.cs
- AdornerLayer.cs
- ColorTransform.cs
- EndEvent.cs
- SecurityHeaderElementInferenceEngine.cs