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
- TextEndOfParagraph.cs
- Point.cs
- GeometryCollection.cs
- StringSorter.cs
- AsyncResult.cs
- ResXDataNode.cs
- TimeEnumHelper.cs
- InternalDuplexBindingElement.cs
- ValidatorCollection.cs
- PropertyDescriptorComparer.cs
- LateBoundBitmapDecoder.cs
- SoapUnknownHeader.cs
- ModuleConfigurationInfo.cs
- TextHidden.cs
- SequentialUshortCollection.cs
- LineBreakRecord.cs
- MetricEntry.cs
- RoutedEventConverter.cs
- OutOfProcStateClientManager.cs
- DataServiceHostFactory.cs
- QueryableFilterUserControl.cs
- TraceProvider.cs
- Crc32.cs
- ObjectTag.cs
- DropDownList.cs
- CallbackDebugBehavior.cs
- FunctionMappingTranslator.cs
- GroupBox.cs
- DataGrid.cs
- SafeMemoryMappedFileHandle.cs
- SchemaAttDef.cs
- IItemContainerGenerator.cs
- ScrollPatternIdentifiers.cs
- EntityContainerRelationshipSet.cs
- TemplateControlBuildProvider.cs
- DrawingGroupDrawingContext.cs
- ColumnMapCopier.cs
- ArrowControl.xaml.cs
- QilNode.cs
- AspNetHostingPermission.cs
- CodeDirectiveCollection.cs
- CollectionViewGroup.cs
- TableCellCollection.cs
- ServerType.cs
- DataListGeneralPage.cs
- CssClassPropertyAttribute.cs
- ServiceContractViewControl.Designer.cs
- ReferenceTypeElement.cs
- CreateRefExpr.cs
- MulticastDelegate.cs
- AlternateViewCollection.cs
- ComplexBindingPropertiesAttribute.cs
- ProtectedConfiguration.cs
- ParagraphVisual.cs
- querybuilder.cs
- ReflectionHelper.cs
- ToolStripDropDownItem.cs
- RsaSecurityKey.cs
- Floater.cs
- XmlStreamStore.cs
- SortedList.cs
- XsltOutput.cs
- Typography.cs
- InnerItemCollectionView.cs
- CurrencyWrapper.cs
- Light.cs
- ContentPresenter.cs
- remotingproxy.cs
- HtmlSelect.cs
- DefaultAssemblyResolver.cs
- ApplicationManager.cs
- DefaultTraceListener.cs
- MemoryFailPoint.cs
- XmlILModule.cs
- AssemblyName.cs
- Image.cs
- PromptStyle.cs
- SamlSecurityTokenAuthenticator.cs
- TraceHelpers.cs
- TrackingMemoryStreamFactory.cs
- MembershipValidatePasswordEventArgs.cs
- XmlSchemaSimpleContentExtension.cs
- DataRowExtensions.cs
- DelimitedListTraceListener.cs
- XmlBindingWorker.cs
- ChannelServices.cs
- StylusPointPropertyUnit.cs
- AsynchronousChannel.cs
- Byte.cs
- WeakEventTable.cs
- QfeChecker.cs
- OverflowException.cs
- Quaternion.cs
- UriExt.cs
- TypedTableGenerator.cs
- BordersPage.cs
- WindowsPrincipal.cs
- OleDbStruct.cs
- FileUpload.cs
- IPAddress.cs