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
- MatrixConverter.cs
- MenuItemBindingCollection.cs
- SequentialUshortCollection.cs
- ListBindableAttribute.cs
- ControlBuilderAttribute.cs
- FrameworkElement.cs
- BinaryConverter.cs
- SaveFileDialogDesigner.cs
- DataRecordInternal.cs
- MenuItemAutomationPeer.cs
- BinaryParser.cs
- CertificateManager.cs
- WindowsStatic.cs
- SqlDependencyUtils.cs
- UnmanagedMemoryStream.cs
- XhtmlTextWriter.cs
- Int64Converter.cs
- BuildProvider.cs
- Converter.cs
- FixedSOMSemanticBox.cs
- SystemBrushes.cs
- SoapServerProtocol.cs
- Calendar.cs
- StylusEventArgs.cs
- XmlSchemaIdentityConstraint.cs
- TraceHandlerErrorFormatter.cs
- SudsWriter.cs
- ExceptionValidationRule.cs
- LambdaCompiler.cs
- FileUtil.cs
- ViewManager.cs
- XmlDataLoader.cs
- ModifyActivitiesPropertyDescriptor.cs
- XmlILConstructAnalyzer.cs
- LineProperties.cs
- TimeIntervalCollection.cs
- __ComObject.cs
- SerializableAttribute.cs
- relpropertyhelper.cs
- FormViewInsertEventArgs.cs
- DesignerSerializerAttribute.cs
- URL.cs
- externdll.cs
- PartitionResolver.cs
- DataGridViewCellMouseEventArgs.cs
- TextBlock.cs
- IndexedGlyphRun.cs
- ConsoleCancelEventArgs.cs
- TdsValueSetter.cs
- XsltQilFactory.cs
- InvalidOperationException.cs
- WebZone.cs
- ChtmlTextWriter.cs
- ValueProviderWrapper.cs
- parserscommon.cs
- ReservationNotFoundException.cs
- Native.cs
- PreviewPrintController.cs
- TextBox.cs
- NameValueSectionHandler.cs
- TextBoxRenderer.cs
- GeometryConverter.cs
- InputMethodStateChangeEventArgs.cs
- ListParaClient.cs
- HatchBrush.cs
- XmlIlGenerator.cs
- OutputCacheProfileCollection.cs
- TriggerAction.cs
- DataServiceRequest.cs
- XmlCountingReader.cs
- ShaderRenderModeValidation.cs
- HttpStreamXmlDictionaryReader.cs
- BitmapEffectInputConnector.cs
- DecimalAnimation.cs
- DataSourceHelper.cs
- LeftCellWrapper.cs
- HwndHostAutomationPeer.cs
- BindingBase.cs
- MetadataItemEmitter.cs
- UserInitiatedNavigationPermission.cs
- MonthCalendarDesigner.cs
- TextContainerChangedEventArgs.cs
- DomNameTable.cs
- TableItemProviderWrapper.cs
- XpsResourcePolicy.cs
- EnumConverter.cs
- TypeBinaryExpression.cs
- SegmentInfo.cs
- SharedDp.cs
- AsynchronousChannelMergeEnumerator.cs
- XmlDomTextWriter.cs
- FileVersionInfo.cs
- ServiceContractGenerationContext.cs
- XmlSchemaGroupRef.cs
- MappableObjectManager.cs
- DomainLiteralReader.cs
- StrokeDescriptor.cs
- __TransparentProxy.cs
- TypeResolver.cs
- FormsAuthentication.cs