Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Shared / MS / Internal / PartialList.cs / 1305600 / PartialList.cs
//---------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // Description: PartialList is used when the developer needs to pass an IList range to // a function that takes generic IList interface. // // // History: // 06/25/2004 : mleonov - Created // //--------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; namespace MS.Internal { ////// PartialList is used when someone needs to pass an IList range to /// a function that takes generic IList interface. It implemented a read-only subset of IList. /// internal class PartialList: IList { private IList _list; private int _initialIndex; private int _count; /// /// Convenience constructor for taking in an entire list. Useful for creating a read-only /// version of the list. /// public PartialList(IListlist) { _list = list; _initialIndex = 0; _count = list.Count; } public PartialList(IList list, int initialIndex, int count) { // make sure early that the caller didn't miscalculate index and count Debug.Assert(initialIndex >= 0 && initialIndex + count <= list.Count); _list = list; _initialIndex = initialIndex; _count = count; } #if !PRESENTATION_CORE /// /// Creates new PartialList object only for true partial ranges. /// Otherwise, returns the original list. /// public static IListCreate(IList list, int initialIndex, int count) { if (list == null) return null; if (initialIndex == 0 && count == list.Count) return list; return new PartialList (list, initialIndex, count); } #endif #region IList Members public void RemoveAt(int index) { // PartialList is read only. throw new NotSupportedException(); } public void Insert(int index, T item) { // PartialList is read only. throw new NotSupportedException(); } public T this[int index] { get { return _list[index + _initialIndex]; } set { // PartialList is read only. throw new NotSupportedException(); } } public int IndexOf(T item) { int index = _list.IndexOf(item); if (index == -1 || index < _initialIndex || index - _initialIndex >= _count) return -1; return index - _initialIndex; } #endregion #region ICollection Members public bool IsReadOnly { get { return true; } } public void Clear() { // PartialList is read only. throw new NotSupportedException(); } public void Add(T item) { // PartialList is read only. throw new NotSupportedException(); } public bool Contains(T item) { return IndexOf(item) != -1; } public bool Remove(T item) { // PartialList is read only. throw new NotSupportedException(); } public int Count { get { return _count; } } public void CopyTo(T[] array, int arrayIndex) { if (arrayIndex < 0) throw new ArgumentOutOfRangeException("arrayIndex"); for (int i = 0; i < _count; ++i) array[arrayIndex + i] = this[i]; } #endregion #region IEnumerable Members IEnumerator IEnumerable .GetEnumerator() { for (int i = _initialIndex; i < _initialIndex + _count; ++i) yield return _list[i]; } #endregion #region IEnumerable Members IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable )this).GetEnumerator(); } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MetadataItemCollectionFactory.cs
- SqlNotificationEventArgs.cs
- UInt32Converter.cs
- PowerModeChangedEventArgs.cs
- XPathMultyIterator.cs
- ChannelCacheDefaults.cs
- EdmComplexPropertyAttribute.cs
- FilterUserControlBase.cs
- coordinator.cs
- InnerItemCollectionView.cs
- XmlElementAttributes.cs
- AssemblyContextControlItem.cs
- InstanceDataCollectionCollection.cs
- ComponentChangingEvent.cs
- ProtectedConfigurationProviderCollection.cs
- SimpleNameService.cs
- MetafileHeaderWmf.cs
- EntityType.cs
- GridEntryCollection.cs
- SoapSchemaExporter.cs
- XPathDocumentNavigator.cs
- XamlStream.cs
- PathGeometry.cs
- FunctionParameter.cs
- DataSourceControl.cs
- AnnotationAuthorChangedEventArgs.cs
- WindowsProgressbar.cs
- MissingFieldException.cs
- UserInitiatedRoutedEventPermissionAttribute.cs
- EmbeddedMailObject.cs
- SyntaxCheck.cs
- SchemaImporterExtension.cs
- TimersDescriptionAttribute.cs
- StylusCollection.cs
- XmlNamedNodeMap.cs
- TagNameToTypeMapper.cs
- TextFormatter.cs
- TableAdapterManagerNameHandler.cs
- MobileUserControl.cs
- XmlTypeMapping.cs
- BuildProvider.cs
- Transform3DCollection.cs
- ConfigurationManagerHelper.cs
- Object.cs
- PageBuildProvider.cs
- WorkflowQueueInfo.cs
- MetadataPropertyCollection.cs
- Matrix.cs
- MarshalByRefObject.cs
- BufferedGraphicsManager.cs
- NegationPusher.cs
- SqlDataSourceCustomCommandPanel.cs
- PropertyGridCommands.cs
- InfoCardBaseException.cs
- PeerCollaboration.cs
- ToolStripLabel.cs
- TranslateTransform.cs
- TextDocumentView.cs
- CngKeyCreationParameters.cs
- TreeChangeInfo.cs
- Vars.cs
- SizeF.cs
- XPathNodeList.cs
- CommentEmitter.cs
- InOutArgumentConverter.cs
- GAC.cs
- DragDeltaEventArgs.cs
- ChangeBlockUndoRecord.cs
- LinkLabelLinkClickedEvent.cs
- SiteMapProvider.cs
- DbXmlEnabledProviderManifest.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- AssemblyInfo.cs
- CounterCreationData.cs
- ReadOnlyAttribute.cs
- SelectionChangedEventArgs.cs
- Polyline.cs
- TabControl.cs
- CodeLabeledStatement.cs
- WindowsComboBox.cs
- EnumBuilder.cs
- TextLineBreak.cs
- RadialGradientBrush.cs
- Matrix3DStack.cs
- TabletDeviceInfo.cs
- TextBoxAutomationPeer.cs
- XmlWrappingReader.cs
- SystemIPGlobalStatistics.cs
- ConfigErrorGlyph.cs
- HwndHost.cs
- NetworkAddressChange.cs
- StringDictionaryEditor.cs
- SystemPens.cs
- X509ChainElement.cs
- TraceListeners.cs
- ContentFilePart.cs
- WebScriptEndpointElement.cs
- SqlDataSourceRefreshSchemaForm.cs
- Rect3DValueSerializer.cs
- ViewLoader.cs