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
- TemplateColumn.cs
- ConnectionPointGlyph.cs
- InfoCardAsymmetricCrypto.cs
- WorkflowInstanceProvider.cs
- DataGridViewButtonCell.cs
- ExtensionDataReader.cs
- TextTreeRootTextBlock.cs
- GroupByQueryOperator.cs
- Transactions.cs
- DataColumn.cs
- ResourceWriter.cs
- SiteMapPath.cs
- MultiTargetingUtil.cs
- Polyline.cs
- CngKey.cs
- DataGridHeaderBorder.cs
- BitmapEffectInputConnector.cs
- SignedInfo.cs
- GlyphTypeface.cs
- util.cs
- ConfigXmlElement.cs
- ViewStateModeByIdAttribute.cs
- BitConverter.cs
- AssociationTypeEmitter.cs
- XmlCharCheckingReader.cs
- DeliveryRequirementsAttribute.cs
- SoapException.cs
- TemplateXamlParser.cs
- LazyTextWriterCreator.cs
- RecordManager.cs
- DocumentPaginator.cs
- PointF.cs
- TraceSection.cs
- SecuritySessionFilter.cs
- StoreItemCollection.Loader.cs
- IListConverters.cs
- ActiveXHost.cs
- ParsedRoute.cs
- SqlBooleanizer.cs
- TransformGroup.cs
- TextBox.cs
- SetStateDesigner.cs
- ConnectionPoint.cs
- DependencyPropertyDescriptor.cs
- CodeValidator.cs
- DoubleLink.cs
- XmlTextReaderImpl.cs
- ApplicationFileParser.cs
- Mappings.cs
- hresults.cs
- EndGetFileNameFromUserRequest.cs
- HttpListenerResponse.cs
- PrefixQName.cs
- VideoDrawing.cs
- TextServicesHost.cs
- BoolExpressionVisitors.cs
- PathFigureCollection.cs
- SecurityException.cs
- PolyLineSegment.cs
- basenumberconverter.cs
- OdbcError.cs
- WinCategoryAttribute.cs
- DelayedRegex.cs
- EditorOptionAttribute.cs
- SqlGenerator.cs
- BaseValidator.cs
- DataContractSerializerSection.cs
- HttpProtocolReflector.cs
- GacUtil.cs
- DrawListViewColumnHeaderEventArgs.cs
- ClientUIRequest.cs
- WindowsStatic.cs
- EmissiveMaterial.cs
- PageAsyncTask.cs
- SubordinateTransaction.cs
- xml.cs
- DataGridRowClipboardEventArgs.cs
- SQLCharsStorage.cs
- SecurityHeader.cs
- SchemaDeclBase.cs
- ScriptingAuthenticationServiceSection.cs
- IisTraceListener.cs
- ParserExtension.cs
- typedescriptorpermissionattribute.cs
- LookupBindingPropertiesAttribute.cs
- ActivityMetadata.cs
- RemoveFromCollection.cs
- Visitors.cs
- LineServicesRun.cs
- Relationship.cs
- ByteStreamGeometryContext.cs
- CompilerError.cs
- XmlSchemaNotation.cs
- BinaryObjectReader.cs
- TreeChangeInfo.cs
- ExecutionContext.cs
- XmlTextEncoder.cs
- UnsafeNativeMethods.cs
- ChangeBlockUndoRecord.cs
- EntitySetBaseCollection.cs