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
- XmlSchemaSimpleTypeList.cs
- TableHeaderCell.cs
- RemotingServices.cs
- ContentPropertyAttribute.cs
- LabelDesigner.cs
- PrePrepareMethodAttribute.cs
- BulletChrome.cs
- ObjectDataSourceSelectingEventArgs.cs
- TextMetrics.cs
- Token.cs
- Tokenizer.cs
- InOutArgument.cs
- ProxyWebPart.cs
- SqlFactory.cs
- TraceEventCache.cs
- LayoutTableCell.cs
- NodeInfo.cs
- ByteStorage.cs
- ConfigurationLocationCollection.cs
- RadioButtonList.cs
- StrokeCollectionDefaultValueFactory.cs
- TabItem.cs
- FileLevelControlBuilderAttribute.cs
- ConnectAlgorithms.cs
- InternalConfirm.cs
- MessagingDescriptionAttribute.cs
- WebPartAddingEventArgs.cs
- LogPolicy.cs
- SelectedGridItemChangedEvent.cs
- SQLDecimal.cs
- TextServicesManager.cs
- SessionStateContainer.cs
- UnsafeNativeMethods.cs
- PageContentAsyncResult.cs
- ChannelSettingsElement.cs
- HttpProfileGroupBase.cs
- TypeSystem.cs
- HttpApplicationFactory.cs
- __TransparentProxy.cs
- ServiceNameElement.cs
- WebReferencesBuildProvider.cs
- SpellerStatusTable.cs
- FileDialog_Vista_Interop.cs
- AnnotationObservableCollection.cs
- WmfPlaceableFileHeader.cs
- WmlValidationSummaryAdapter.cs
- TypeExtension.cs
- EtwTrace.cs
- UnsafeNativeMethods.cs
- GroupBoxAutomationPeer.cs
- ImpersonateTokenRef.cs
- DataGridViewColumnStateChangedEventArgs.cs
- CodeSubDirectoriesCollection.cs
- FormsAuthentication.cs
- XsdDuration.cs
- TimeZone.cs
- RelationshipDetailsRow.cs
- StateMachineHelpers.cs
- XmlSchemaParticle.cs
- RubberbandSelector.cs
- SimpleHandlerFactory.cs
- BlockCollection.cs
- DesignOnlyAttribute.cs
- RuntimeEnvironment.cs
- ButtonChrome.cs
- ISAPIWorkerRequest.cs
- TemplateBamlRecordReader.cs
- AssemblyCollection.cs
- CompoundFileIOPermission.cs
- OleDbPermission.cs
- ClientRolePrincipal.cs
- LiteralLink.cs
- MatrixAnimationUsingPath.cs
- MeasureData.cs
- ScrollProperties.cs
- securitymgrsite.cs
- DateTimeAutomationPeer.cs
- PageClientProxyGenerator.cs
- XmlSchemaCompilationSettings.cs
- WebConvert.cs
- HtmlInputPassword.cs
- XmlExceptionHelper.cs
- ButtonField.cs
- Pkcs7Recipient.cs
- CommonDialog.cs
- OrderByBuilder.cs
- ContextStaticAttribute.cs
- FieldBuilder.cs
- ISFClipboardData.cs
- ProtocolsConfigurationEntry.cs
- ObfuscateAssemblyAttribute.cs
- BinaryReader.cs
- FilterEventArgs.cs
- WebDescriptionAttribute.cs
- ColorDialog.cs
- SectionUpdates.cs
- HtmlHistory.cs
- MenuAutomationPeer.cs
- AtomMaterializerLog.cs
- Hyperlink.cs