Code:
/ 4.0 / 4.0 / untmp / 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.. ///
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- _AutoWebProxyScriptEngine.cs
- InputScopeAttribute.cs
- QueryTreeBuilder.cs
- AssemblyNameUtility.cs
- ChineseLunisolarCalendar.cs
- InputScope.cs
- ModifiableIteratorCollection.cs
- OleDbInfoMessageEvent.cs
- InkCanvasSelection.cs
- CustomError.cs
- MethodBuilderInstantiation.cs
- XmlJsonWriter.cs
- DisplayNameAttribute.cs
- SQLByte.cs
- NextPreviousPagerField.cs
- FileLoadException.cs
- LongSumAggregationOperator.cs
- NumericExpr.cs
- RightsManagementEncryptedStream.cs
- PageStatePersister.cs
- BasicHttpMessageSecurityElement.cs
- WizardStepBase.cs
- TagMapInfo.cs
- ClientSideQueueItem.cs
- SqlTypeConverter.cs
- Constraint.cs
- FieldBuilder.cs
- ChtmlTextWriter.cs
- PopupRoot.cs
- AssociationEndMember.cs
- _Rfc2616CacheValidators.cs
- WsdlBuildProvider.cs
- SiteMap.cs
- GridViewAutomationPeer.cs
- AssociationTypeEmitter.cs
- ObservableCollection.cs
- BStrWrapper.cs
- Crc32.cs
- LongValidator.cs
- CompiledQueryCacheEntry.cs
- InteropEnvironment.cs
- MaskedTextProvider.cs
- XmlSchemaSimpleTypeRestriction.cs
- EventWaitHandleSecurity.cs
- TableLayoutStyle.cs
- FieldToken.cs
- NumericExpr.cs
- GC.cs
- HttpStaticObjectsCollectionWrapper.cs
- CodeTypeDelegate.cs
- precedingquery.cs
- HideDisabledControlAdapter.cs
- ProcessRequestArgs.cs
- JournalEntry.cs
- ClientSession.cs
- CodeMemberMethod.cs
- SerializationEventsCache.cs
- AuthenticationService.cs
- RemotingConfiguration.cs
- LinkLabel.cs
- PTUtility.cs
- XmlSerializableReader.cs
- PackageDigitalSignatureManager.cs
- CodeChecksumPragma.cs
- WebDisplayNameAttribute.cs
- CompilerError.cs
- InstanceDataCollectionCollection.cs
- MouseGestureValueSerializer.cs
- ResourceProviderFactory.cs
- TransformerInfoCollection.cs
- RenderContext.cs
- CapabilitiesUse.cs
- CompilerGeneratedAttribute.cs
- RegisteredHiddenField.cs
- DataServiceSaveChangesEventArgs.cs
- Win32.cs
- AmbientLight.cs
- FontStretch.cs
- ExpressionNode.cs
- VScrollProperties.cs
- CustomWebEventKey.cs
- DefaultValueConverter.cs
- StorageComplexTypeMapping.cs
- SqlEnums.cs
- Transform3DCollection.cs
- RegularExpressionValidator.cs
- Propagator.Evaluator.cs
- PinnedBufferMemoryStream.cs
- WindowsListViewGroup.cs
- ViewGenResults.cs
- SortedDictionary.cs
- DiscoveryExceptionDictionary.cs
- TypeReference.cs
- WebPartMovingEventArgs.cs
- ValidationEventArgs.cs
- Selector.cs
- CellCreator.cs
- TraceListener.cs
- ScriptingSectionGroup.cs
- EntitySqlException.cs