Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataWeb / Client / System / Data / Services / Client / ReferenceEqualityComparer.cs / 1305376 / ReferenceEqualityComparer.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // //// Provides a class that can compare objects for reference equality. // //--------------------------------------------------------------------- //// #define NON_GENERIC_AVAILABLE #if ASTORIA_CLIENT namespace System.Data.Services.Client #else namespace System.Data.Services #endif { #region Namespaces. using System.Collections.Generic; using System.Diagnostics; using System.Linq.Expressions; using System.Text; using System.Collections; #endregion Namespaces. ///Equality comparer implementation that uses reference equality. internal class ReferenceEqualityComparer : IEqualityComparer { #region Private fields. #if NON_GENERIC_AVAILABLE ///Singleton instance (non-generic, as opposed to the one in ReferenceEqualityComparer<T>. private static ReferenceEqualityComparer nonGenericInstance; #endif #endregion Private fields. #region Constructors. ///Initializes a new protected ReferenceEqualityComparer() { } #endregion Constructors. #region Properties. ///instance. Determines whether two objects are the same. /// First object to compare. /// Second object to compare. ///true if both are the same; false otherwise. bool IEqualityComparer.Equals(object x, object y) { return object.ReferenceEquals(x, y); } ///Serves as hashing function for collections. /// Object to hash. ////// Hash code for the object; shouldn't change through the lifetime /// of int IEqualityComparer.GetHashCode(object obj) { if (obj == null) { return 0; } return obj.GetHashCode(); } #if NON_GENERIC_AVAILABLE ///. /// Singleton instance (non-generic, as opposed to the one in ReferenceEqualityComparer<T>. internal ReferenceEqualityComparer NonGenericInstance { get { if (nonGenericInstance == null) { ReferenceEqualityComparer comparer = new ReferenceEqualityComparer(); System.Threading.Interlocked.CompareExchange(ref nonGenericInstance, comparer, null); } return nonGenericInstance; } } #endif #endregion Properties. } ////// Use this class to compare objects by reference in collections such as /// dictionary or hashsets. /// ///Type of objects to compare. ////// Typically accesses statically as eg /// ReferenceEqualityComparer<Expression>.Instance. /// internal sealed class ReferenceEqualityComparer: ReferenceEqualityComparer, IEqualityComparer { #region Private fields. /// Single instance per 'T' for comparison. private static ReferenceEqualityComparerinstance; #endregion Private fields. #region Constructors. /// Initializes a new private ReferenceEqualityComparer() : base() { } #endregion Constructors. #region Properties. ///instance. Returns a singleton instance for this comparer type. internal static ReferenceEqualityComparerInstance { get { if (instance == null) { Debug.Assert(!typeof(T).IsValueType, "!typeof(T).IsValueType -- can't use reference equality in a meaningful way with value types"); ReferenceEqualityComparer newInstance = new ReferenceEqualityComparer (); System.Threading.Interlocked.CompareExchange(ref instance, newInstance, null); } return instance; } } #endregion Properties. #region Methods. /// Determines whether two objects are the same. /// First object to compare. /// Second object to compare. ///true if both are the same; false otherwise. public bool Equals(T x, T y) { return object.ReferenceEquals(x, y); } ///Serves as hashing function for collections. /// Object to hash. ////// Hash code for the object; shouldn't change through the lifetime /// of public int GetHashCode(T obj) { if (obj == null) { return 0; } return obj.GetHashCode(); } #endregion Methods. } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- //. /// // Copyright (c) Microsoft Corporation. All rights reserved. // //// Provides a class that can compare objects for reference equality. // //--------------------------------------------------------------------- //// #define NON_GENERIC_AVAILABLE #if ASTORIA_CLIENT namespace System.Data.Services.Client #else namespace System.Data.Services #endif { #region Namespaces. using System.Collections.Generic; using System.Diagnostics; using System.Linq.Expressions; using System.Text; using System.Collections; #endregion Namespaces. ///Equality comparer implementation that uses reference equality. internal class ReferenceEqualityComparer : IEqualityComparer { #region Private fields. #if NON_GENERIC_AVAILABLE ///Singleton instance (non-generic, as opposed to the one in ReferenceEqualityComparer<T>. private static ReferenceEqualityComparer nonGenericInstance; #endif #endregion Private fields. #region Constructors. ///Initializes a new protected ReferenceEqualityComparer() { } #endregion Constructors. #region Properties. ///instance. Determines whether two objects are the same. /// First object to compare. /// Second object to compare. ///true if both are the same; false otherwise. bool IEqualityComparer.Equals(object x, object y) { return object.ReferenceEquals(x, y); } ///Serves as hashing function for collections. /// Object to hash. ////// Hash code for the object; shouldn't change through the lifetime /// of int IEqualityComparer.GetHashCode(object obj) { if (obj == null) { return 0; } return obj.GetHashCode(); } #if NON_GENERIC_AVAILABLE ///. /// Singleton instance (non-generic, as opposed to the one in ReferenceEqualityComparer<T>. internal ReferenceEqualityComparer NonGenericInstance { get { if (nonGenericInstance == null) { ReferenceEqualityComparer comparer = new ReferenceEqualityComparer(); System.Threading.Interlocked.CompareExchange(ref nonGenericInstance, comparer, null); } return nonGenericInstance; } } #endif #endregion Properties. } ////// Use this class to compare objects by reference in collections such as /// dictionary or hashsets. /// ///Type of objects to compare. ////// Typically accesses statically as eg /// ReferenceEqualityComparer<Expression>.Instance. /// internal sealed class ReferenceEqualityComparer: ReferenceEqualityComparer, IEqualityComparer { #region Private fields. /// Single instance per 'T' for comparison. private static ReferenceEqualityComparerinstance; #endregion Private fields. #region Constructors. /// Initializes a new private ReferenceEqualityComparer() : base() { } #endregion Constructors. #region Properties. ///instance. Returns a singleton instance for this comparer type. internal static ReferenceEqualityComparerInstance { get { if (instance == null) { Debug.Assert(!typeof(T).IsValueType, "!typeof(T).IsValueType -- can't use reference equality in a meaningful way with value types"); ReferenceEqualityComparer newInstance = new ReferenceEqualityComparer (); System.Threading.Interlocked.CompareExchange(ref instance, newInstance, null); } return instance; } } #endregion Properties. #region Methods. /// Determines whether two objects are the same. /// First object to compare. /// Second object to compare. ///true if both are the same; false otherwise. public bool Equals(T x, T y) { return object.ReferenceEquals(x, y); } ///Serves as hashing function for collections. /// Object to hash. ////// Hash code for the object; shouldn't change through the lifetime /// of public int GetHashCode(T obj) { if (obj == null) { return 0; } return obj.GetHashCode(); } #endregion Methods. } } // 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
- XmlSchemaAttribute.cs
- ListBox.cs
- QuotedStringFormatReader.cs
- MemberCollection.cs
- WorkflowInspectionServices.cs
- invalidudtexception.cs
- ViewCellSlot.cs
- ExpandoObject.cs
- PathParser.cs
- DownloadProgressEventArgs.cs
- PathSegmentCollection.cs
- WpfKnownMemberInvoker.cs
- ProbeMatchesApril2005.cs
- DataGridRow.cs
- DrawingBrush.cs
- ItemCollectionEditor.cs
- TaiwanLunisolarCalendar.cs
- HttpPostedFile.cs
- ErrorFormatterPage.cs
- XmlSchemaSimpleTypeUnion.cs
- QueryBranchOp.cs
- BamlRecordWriter.cs
- WindowsFormsLinkLabel.cs
- SqlRowUpdatingEvent.cs
- ScriptManagerProxy.cs
- StorageComplexPropertyMapping.cs
- Rotation3DAnimationUsingKeyFrames.cs
- SevenBitStream.cs
- EmbeddedMailObjectsCollection.cs
- WorkflowDesignerMessageFilter.cs
- BoundColumn.cs
- FixedSOMImage.cs
- GridViewRow.cs
- shaperfactoryquerycachekey.cs
- ParseNumbers.cs
- NotificationContext.cs
- SizeAnimationUsingKeyFrames.cs
- Propagator.JoinPropagator.cs
- AudioFormatConverter.cs
- ReadOnlyNameValueCollection.cs
- EventMappingSettingsCollection.cs
- NativeMethodsCLR.cs
- SqlNodeAnnotations.cs
- Encoder.cs
- Select.cs
- DataPagerFieldItem.cs
- XmlQueryStaticData.cs
- CallbackValidatorAttribute.cs
- ServiceOperation.cs
- MailWebEventProvider.cs
- ListenerConstants.cs
- ModifierKeysValueSerializer.cs
- ContractMapping.cs
- WebReferencesBuildProvider.cs
- Stroke.cs
- OLEDB_Enum.cs
- SimpleType.cs
- QueryRelOp.cs
- InstallerTypeAttribute.cs
- DataReceivedEventArgs.cs
- ValueQuery.cs
- PointConverter.cs
- WebRequestModuleElementCollection.cs
- SwitchLevelAttribute.cs
- ProfileServiceManager.cs
- Int64AnimationBase.cs
- SourceChangedEventArgs.cs
- SerializableAttribute.cs
- DataServiceClientException.cs
- AssertUtility.cs
- TraceContext.cs
- UnSafeCharBuffer.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- MenuItem.cs
- SkinBuilder.cs
- GridProviderWrapper.cs
- FilteredSchemaElementLookUpTable.cs
- base64Transforms.cs
- TextRange.cs
- FixedBufferAttribute.cs
- LocatorPartList.cs
- ObjectView.cs
- ProfileGroupSettingsCollection.cs
- MessageContractExporter.cs
- DefaultAuthorizationContext.cs
- Property.cs
- DeadCharTextComposition.cs
- EntityContainerEmitter.cs
- FixedPage.cs
- ApplicationInfo.cs
- MouseActionValueSerializer.cs
- CollectionType.cs
- HostedController.cs
- DataRowComparer.cs
- IBuiltInEvidence.cs
- CompilerInfo.cs
- NameValueConfigurationElement.cs
- TemplateInstanceAttribute.cs
- TableColumn.cs
- XmlChoiceIdentifierAttribute.cs