Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / clr / src / BCL / System / Collections / ObjectModel / ReadOnlyCollection.cs / 1 / ReadOnlyCollection.cs
namespace System.Collections.ObjectModel { using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; [Serializable()] [System.Runtime.InteropServices.ComVisible(false)] [DebuggerTypeProxy(typeof(Mscorlib_CollectionDebugView<>))] [DebuggerDisplay("Count = {Count}")] public class ReadOnlyCollection: IList , IList { IList list; [NonSerialized] private Object _syncRoot; public ReadOnlyCollection(IList list) { if (list == null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.list); } this.list = list; } public int Count { get { return list.Count; } } public T this[int index] { get { return list[index]; } } public bool Contains(T value) { return list.Contains(value); } public void CopyTo(T[] array, int index) { list.CopyTo(array, index); } public IEnumerator GetEnumerator() { return list.GetEnumerator(); } public int IndexOf(T value) { return list.IndexOf(value); } protected IList Items { get { return list; } } bool ICollection .IsReadOnly { get { return true; } } T IList .this[int index] { get { return list[index]; } set { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); } } void ICollection .Add(T value) { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); } void ICollection .Clear() { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); } void IList .Insert(int index, T value) { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); } bool ICollection .Remove(T value) { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); return false; } void IList .RemoveAt(int index) { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)list).GetEnumerator(); } bool ICollection.IsSynchronized { get { return false; } } object ICollection.SyncRoot { get { if( _syncRoot == null) { ICollection c = list as ICollection; if( c != null) { _syncRoot = c.SyncRoot; } else { System.Threading.Interlocked.CompareExchange(ref _syncRoot, new Object(), null); } } return _syncRoot; } } void ICollection.CopyTo(Array array, int index) { if (array==null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array); } if (array.Rank != 1) { ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_RankMultiDimNotSupported); } if( array.GetLowerBound(0) != 0 ) { ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_NonZeroLowerBound); } if (index < 0) { ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.arrayIndex, ExceptionResource.ArgumentOutOfRange_NeedNonNegNum); } if (array.Length - index < Count) { ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_ArrayPlusOffTooSmall); } T[] items = array as T[]; if (items != null) { list.CopyTo(items, index); } else { // // Catch the obvious case assignment will fail. // We can found all possible problems by doing the check though. // For example, if the element type of the Array is derived from T, // we can't figure out if we can successfully copy the element beforehand. // Type targetType = array.GetType().GetElementType(); Type sourceType = typeof(T); if(!(targetType.IsAssignableFrom(sourceType) || sourceType.IsAssignableFrom(targetType))) { ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidArrayType); } // // We can't cast array of value type to object[], so we don't support // widening of primitive types here. // object[] objects = array as object[]; if( objects == null) { ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidArrayType); } int count = list.Count; try { for (int i = 0; i < count; i++) { objects[index++] = list[i]; } } catch(ArrayTypeMismatchException) { ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidArrayType); } } } bool IList.IsFixedSize { get { return true; } } bool IList.IsReadOnly { get { return true; } } object IList.this[int index] { get { return list[index]; } set { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); } } int IList.Add(object value) { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); return -1; } void IList.Clear() { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); } private static bool IsCompatibleObject(object value) { if( (value is T) || ( value == null && !typeof(T).IsValueType) ) { return true; } return false; } bool IList.Contains(object value) { if(IsCompatibleObject(value)) { return Contains((T)value); } return false; } int IList.IndexOf(object value) { if(IsCompatibleObject(value)) { return IndexOf((T)value); } return -1; } void IList.Insert(int index, object value) { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); } void IList.Remove(object value) { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); } void IList.RemoveAt(int index) { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); } private static void VerifyValueType(object value) { if( !IsCompatibleObject(value)) { ThrowHelper.ThrowWrongValueTypeArgumentException(value, typeof(T)); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. namespace System.Collections.ObjectModel { using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; [Serializable()] [System.Runtime.InteropServices.ComVisible(false)] [DebuggerTypeProxy(typeof(Mscorlib_CollectionDebugView<>))] [DebuggerDisplay("Count = {Count}")] public class ReadOnlyCollection : IList , IList { IList list; [NonSerialized] private Object _syncRoot; public ReadOnlyCollection(IList list) { if (list == null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.list); } this.list = list; } public int Count { get { return list.Count; } } public T this[int index] { get { return list[index]; } } public bool Contains(T value) { return list.Contains(value); } public void CopyTo(T[] array, int index) { list.CopyTo(array, index); } public IEnumerator GetEnumerator() { return list.GetEnumerator(); } public int IndexOf(T value) { return list.IndexOf(value); } protected IList Items { get { return list; } } bool ICollection .IsReadOnly { get { return true; } } T IList .this[int index] { get { return list[index]; } set { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); } } void ICollection .Add(T value) { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); } void ICollection .Clear() { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); } void IList .Insert(int index, T value) { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); } bool ICollection .Remove(T value) { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); return false; } void IList .RemoveAt(int index) { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)list).GetEnumerator(); } bool ICollection.IsSynchronized { get { return false; } } object ICollection.SyncRoot { get { if( _syncRoot == null) { ICollection c = list as ICollection; if( c != null) { _syncRoot = c.SyncRoot; } else { System.Threading.Interlocked.CompareExchange(ref _syncRoot, new Object(), null); } } return _syncRoot; } } void ICollection.CopyTo(Array array, int index) { if (array==null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.array); } if (array.Rank != 1) { ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_RankMultiDimNotSupported); } if( array.GetLowerBound(0) != 0 ) { ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_NonZeroLowerBound); } if (index < 0) { ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.arrayIndex, ExceptionResource.ArgumentOutOfRange_NeedNonNegNum); } if (array.Length - index < Count) { ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_ArrayPlusOffTooSmall); } T[] items = array as T[]; if (items != null) { list.CopyTo(items, index); } else { // // Catch the obvious case assignment will fail. // We can found all possible problems by doing the check though. // For example, if the element type of the Array is derived from T, // we can't figure out if we can successfully copy the element beforehand. // Type targetType = array.GetType().GetElementType(); Type sourceType = typeof(T); if(!(targetType.IsAssignableFrom(sourceType) || sourceType.IsAssignableFrom(targetType))) { ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidArrayType); } // // We can't cast array of value type to object[], so we don't support // widening of primitive types here. // object[] objects = array as object[]; if( objects == null) { ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidArrayType); } int count = list.Count; try { for (int i = 0; i < count; i++) { objects[index++] = list[i]; } } catch(ArrayTypeMismatchException) { ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_InvalidArrayType); } } } bool IList.IsFixedSize { get { return true; } } bool IList.IsReadOnly { get { return true; } } object IList.this[int index] { get { return list[index]; } set { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); } } int IList.Add(object value) { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); return -1; } void IList.Clear() { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); } private static bool IsCompatibleObject(object value) { if( (value is T) || ( value == null && !typeof(T).IsValueType) ) { return true; } return false; } bool IList.Contains(object value) { if(IsCompatibleObject(value)) { return Contains((T)value); } return false; } int IList.IndexOf(object value) { if(IsCompatibleObject(value)) { return IndexOf((T)value); } return -1; } void IList.Insert(int index, object value) { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); } void IList.Remove(object value) { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); } void IList.RemoveAt(int index) { ThrowHelper.ThrowNotSupportedException(ExceptionResource.NotSupported_ReadOnlyCollection); } private static void VerifyValueType(object value) { if( !IsCompatibleObject(value)) { ThrowHelper.ThrowWrongValueTypeArgumentException(value, typeof(T)); } } } } // 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
- CRYPTPROTECT_PROMPTSTRUCT.cs
- DataGridRowEventArgs.cs
- LocalFileSettingsProvider.cs
- Msmq4PoisonHandler.cs
- filewebrequest.cs
- LogRecordSequence.cs
- MetafileHeaderWmf.cs
- EnumValidator.cs
- ConstructorNeedsTagAttribute.cs
- ArrayList.cs
- COM2Properties.cs
- MsmqIntegrationInputMessage.cs
- OleDbInfoMessageEvent.cs
- MetadataPropertyAttribute.cs
- QueryOutputWriter.cs
- TypeViewSchema.cs
- PenThreadWorker.cs
- AbstractSvcMapFileLoader.cs
- ArgIterator.cs
- QueryConverter.cs
- COM2FontConverter.cs
- Gdiplus.cs
- ToolStripGripRenderEventArgs.cs
- CorrelationInitializer.cs
- HttpResponseHeader.cs
- PenContext.cs
- WindowsListViewSubItem.cs
- FilteredXmlReader.cs
- Attributes.cs
- ToolStripKeyboardHandlingService.cs
- KnownTypesProvider.cs
- SqlDataSourceEnumerator.cs
- SQLDecimal.cs
- UInt64Converter.cs
- AppDomainFactory.cs
- Ray3DHitTestResult.cs
- MatchingStyle.cs
- AsyncPostBackErrorEventArgs.cs
- XPathAncestorQuery.cs
- ForeignKeyFactory.cs
- ServicePoint.cs
- ConnectionInterfaceCollection.cs
- PageHandlerFactory.cs
- NodeLabelEditEvent.cs
- XmlStreamedByteStreamReader.cs
- MemberMaps.cs
- HtmlInputImage.cs
- DynamicEntity.cs
- ListBoxItemWrapperAutomationPeer.cs
- ContextInformation.cs
- _MultipleConnectAsync.cs
- WindowsGraphics2.cs
- MethodSignatureGenerator.cs
- IteratorDescriptor.cs
- IPHostEntry.cs
- UIAgentAsyncParams.cs
- PieceNameHelper.cs
- SqlClientMetaDataCollectionNames.cs
- DuplexClientBase.cs
- SEHException.cs
- SchemeSettingElementCollection.cs
- sortedlist.cs
- NameValueCollection.cs
- SecureConversationVersion.cs
- BitmapPalette.cs
- C14NUtil.cs
- Timer.cs
- PenLineCapValidation.cs
- TabRenderer.cs
- ListBindableAttribute.cs
- ListBase.cs
- DelegatingConfigHost.cs
- DataGridColumnsPage.cs
- IndividualDeviceConfig.cs
- DatagridviewDisplayedBandsData.cs
- FlowLayoutSettings.cs
- DataGridViewSelectedRowCollection.cs
- DataMemberListEditor.cs
- WebPartEditVerb.cs
- BindingWorker.cs
- Model3D.cs
- AuthorizationRuleCollection.cs
- HtmlShimManager.cs
- NotSupportedException.cs
- StaticTextPointer.cs
- cookieexception.cs
- PopOutPanel.cs
- SparseMemoryStream.cs
- CompositeFontFamily.cs
- GeneratedContractType.cs
- StylusTip.cs
- MappingMetadataHelper.cs
- HtmlLink.cs
- DataGridViewCellValueEventArgs.cs
- HandlerFactoryWrapper.cs
- ScriptServiceAttribute.cs
- AsnEncodedData.cs
- ConnectionPoolManager.cs
- XsdValidatingReader.cs
- Select.cs