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
- FragmentNavigationEventArgs.cs
- MimeBasePart.cs
- IfElseDesigner.xaml.cs
- HwndSourceParameters.cs
- PageTheme.cs
- SqlDataSource.cs
- Ray3DHitTestResult.cs
- DisableDpiAwarenessAttribute.cs
- XsdDataContractImporter.cs
- XmlNotation.cs
- PrintDocument.cs
- ExecutionEngineException.cs
- VarRefManager.cs
- EntityClientCacheKey.cs
- FlowLayoutPanel.cs
- WebPartConnection.cs
- CleanUpVirtualizedItemEventArgs.cs
- CacheMode.cs
- HttpContext.cs
- ListItemParagraph.cs
- EqualityArray.cs
- WebPartsSection.cs
- SourceLineInfo.cs
- CodeSnippetTypeMember.cs
- BindingWorker.cs
- _SslState.cs
- thaishape.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- CombinedGeometry.cs
- WsdlImporterElement.cs
- DeviceContext.cs
- UrlPath.cs
- safex509handles.cs
- CheckBoxFlatAdapter.cs
- SubMenuStyleCollection.cs
- VectorAnimationBase.cs
- HelpKeywordAttribute.cs
- AttributeAction.cs
- OutputCacheSection.cs
- CompareValidator.cs
- LogAppendAsyncResult.cs
- UnmanagedMarshal.cs
- ExpressionParser.cs
- DocumentReference.cs
- Empty.cs
- LoadGrammarCompletedEventArgs.cs
- SwitchElementsCollection.cs
- LogStore.cs
- InkCanvas.cs
- MobileControlsSectionHandler.cs
- ObjectAnimationBase.cs
- ExpressionCopier.cs
- ObjectSecurityT.cs
- ProfileManager.cs
- GroupItemAutomationPeer.cs
- WindowsComboBox.cs
- DetailsViewPagerRow.cs
- Attributes.cs
- LoadedOrUnloadedOperation.cs
- DiscoveryExceptionDictionary.cs
- ScrollContentPresenter.cs
- PageThemeParser.cs
- EntityConnection.cs
- SendActivityDesignerTheme.cs
- BackEase.cs
- SimpleLine.cs
- ChangePassword.cs
- WindowsIPAddress.cs
- DataBoundLiteralControl.cs
- ContentElement.cs
- AspCompat.cs
- ReflectionPermission.cs
- IDispatchConstantAttribute.cs
- TextEndOfSegment.cs
- RecognizerStateChangedEventArgs.cs
- WebDescriptionAttribute.cs
- Separator.cs
- ColorConverter.cs
- MsmqDecodeHelper.cs
- MatrixUtil.cs
- MessageAction.cs
- TextPattern.cs
- ListControl.cs
- Socket.cs
- ValidationErrorCollection.cs
- oledbconnectionstring.cs
- OrderedDictionary.cs
- RSAProtectedConfigurationProvider.cs
- LineGeometry.cs
- SortedSetDebugView.cs
- EventLogRecord.cs
- HScrollBar.cs
- MergeEnumerator.cs
- DefaultObjectSerializer.cs
- MergeExecutor.cs
- GeometryGroup.cs
- IgnoreSectionHandler.cs
- DES.cs
- DeliveryRequirementsAttribute.cs
- TransactionProxy.cs