Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / SynchronizedCollection.cs / 1 / SynchronizedCollection.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Collections.Generic { using System; using System.Collections; using System.Diagnostics; using System.ServiceModel; [System.Runtime.InteropServices.ComVisible(false)] public class SynchronizedCollection: IList , IList { List items; object sync; public SynchronizedCollection() { this.items = new List (); this.sync = new Object(); } public SynchronizedCollection(object syncRoot) { if (syncRoot == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("syncRoot")); this.items = new List (); this.sync = syncRoot; } public SynchronizedCollection(object syncRoot, IEnumerable list) { if (syncRoot == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("syncRoot")); if (list == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("list")); this.items = new List (list); this.sync = syncRoot; } public SynchronizedCollection(object syncRoot, params T[] list) { if (syncRoot == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("syncRoot")); if (list == null) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("list")); this.items = new List (list.Length); for (int i=0; i Items { get { return this.items; } } public object SyncRoot { get { return this.sync; } } public T this[int index] { get { lock (this.sync) { return this.items[index]; } } set { lock (this.sync) { if (index < 0 || index >= this.items.Count) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("index", index, SR.GetString(SR.ValueMustBeInRange, 0, this.items.Count - 1))); this.SetItem(index, value); } } } public void Add(T item) { lock (this.sync) { int index = this.items.Count; this.InsertItem(index, item); } } public void Clear() { lock (this.sync) { this.ClearItems(); } } public void CopyTo(T[] array, int index) { lock (this.sync) { this.items.CopyTo(array, index); } } public bool Contains(T item) { lock (this.sync) { return this.items.Contains(item); } } public IEnumerator GetEnumerator() { lock (this.sync) { return this.items.GetEnumerator(); } } public int IndexOf(T item) { lock (this.sync) { return this.InternalIndexOf(item); } } public void Insert(int index, T item) { lock (this.sync) { if (index < 0 || index > this.items.Count) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("index", index, SR.GetString(SR.ValueMustBeInRange, 0, this.items.Count))); this.InsertItem(index, item); } } int InternalIndexOf(T item) { int count = items.Count; for (int i = 0; i < count; i++) { if (object.Equals(items[i], item)) { return i; } } return -1; } public bool Remove(T item) { lock (this.sync) { int index = this.InternalIndexOf(item); if (index < 0) return false; this.RemoveItem(index); return true; } } public void RemoveAt(int index) { lock (this.sync) { if (index < 0 || index >= this.items.Count) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("index", index, SR.GetString(SR.ValueMustBeInRange, 0, this.items.Count - 1))); this.RemoveItem(index); } } protected virtual void ClearItems() { this.items.Clear(); } protected virtual void InsertItem(int index, T item) { this.items.Insert(index, item); } protected virtual void RemoveItem(int index) { this.items.RemoveAt(index); } protected virtual void SetItem(int index, T item) { this.items[index] = item; } bool ICollection .IsReadOnly { get { return false; } } IEnumerator IEnumerable.GetEnumerator() { return ((IList)this.items).GetEnumerator(); } bool ICollection.IsSynchronized { get { return true; } } object ICollection.SyncRoot { get { return this.sync; } } void ICollection.CopyTo(Array array, int index) { lock (this.sync) { ((IList)this.items).CopyTo(array, index); } } object IList.this[int index] { get { return this[index]; } set { VerifyValueType(value); this[index] = (T)value; } } bool IList.IsReadOnly { get { return false;} } bool IList.IsFixedSize { get { return false;} } int IList.Add(object value) { VerifyValueType(value); lock (this.sync) { this.Add((T)value); return this.Count - 1; } } bool IList.Contains(object value) { VerifyValueType(value); return this.Contains((T)value); } int IList.IndexOf(object value) { VerifyValueType(value); return this.IndexOf((T)value); } void IList.Insert(int index, object value) { VerifyValueType(value); this.Insert(index, (T)value); } void IList.Remove(object value) { VerifyValueType(value); this.Remove((T)value); } static void VerifyValueType(object value) { if (value == null) { if (typeof(T).IsValueType) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.GetString(SR.SynchronizedCollectionWrongTypeNull))); } } else if (!(value is T)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.GetString(SR.SynchronizedCollectionWrongType1, value.GetType().FullName))); } } } } // 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
- StrokeCollectionConverter.cs
- NetSectionGroup.cs
- RoleGroup.cs
- SqlTypesSchemaImporter.cs
- SizeFConverter.cs
- TextPointerBase.cs
- FixUpCollection.cs
- IERequestCache.cs
- XmlAnyElementAttributes.cs
- SolidColorBrush.cs
- Assembly.cs
- ListViewGroupItemCollection.cs
- DocumentXPathNavigator.cs
- RegexFCD.cs
- FastEncoderWindow.cs
- MessageLoggingElement.cs
- DataStorage.cs
- ConsoleEntryPoint.cs
- WindowProviderWrapper.cs
- ShaperBuffers.cs
- CollectionViewSource.cs
- WebBrowserSiteBase.cs
- ContactManager.cs
- ProvidersHelper.cs
- Section.cs
- ConfigViewGenerator.cs
- RegexWriter.cs
- ReaderWriterLock.cs
- GroupBox.cs
- NameValuePair.cs
- DecoderFallbackWithFailureFlag.cs
- ShaderEffect.cs
- DecoderBestFitFallback.cs
- MatrixAnimationUsingKeyFrames.cs
- WinFormsUtils.cs
- InstanceDescriptor.cs
- PartialTrustHelpers.cs
- PageThemeCodeDomTreeGenerator.cs
- XDeferredAxisSource.cs
- TextRangeEditLists.cs
- SourceInterpreter.cs
- XmlFileEditor.cs
- SystemUdpStatistics.cs
- PkcsMisc.cs
- RawStylusActions.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- XmlToDatasetMap.cs
- SimpleBitVector32.cs
- NameValueConfigurationCollection.cs
- DebuggerAttributes.cs
- Group.cs
- HtmlInputImage.cs
- NullableFloatSumAggregationOperator.cs
- OperatorExpressions.cs
- _KerberosClient.cs
- SerializationInfo.cs
- GetPageNumberCompletedEventArgs.cs
- RelationshipManager.cs
- FileDialogCustomPlacesCollection.cs
- Vector3D.cs
- TrueReadOnlyCollection.cs
- DataKeyCollection.cs
- TraceContextRecord.cs
- SaveFileDialog.cs
- unitconverter.cs
- NotifyParentPropertyAttribute.cs
- Location.cs
- GPPOINT.cs
- BuildResult.cs
- StateDesigner.LayoutSelectionGlyph.cs
- TagNameToTypeMapper.cs
- UnknownWrapper.cs
- DocumentGridContextMenu.cs
- MergePropertyDescriptor.cs
- BitmapDecoder.cs
- SQLString.cs
- FrugalList.cs
- iisPickupDirectory.cs
- Accessible.cs
- HostingEnvironment.cs
- PerfService.cs
- XamlValidatingReader.cs
- StorageFunctionMapping.cs
- ConnectorEditor.cs
- ClickablePoint.cs
- PerfService.cs
- TypeConstant.cs
- OrderPreservingPipeliningMergeHelper.cs
- wgx_sdk_version.cs
- RequestCache.cs
- AutoSizeToolBoxItem.cs
- StringToken.cs
- NullableIntSumAggregationOperator.cs
- Canvas.cs
- PanelDesigner.cs
- RegexCharClass.cs
- OutputWindow.cs
- Assembly.cs
- JpegBitmapEncoder.cs
- NumericUpDownAccelerationCollection.cs