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
- EnumMember.cs
- Path.cs
- SignerInfo.cs
- SessionEndingCancelEventArgs.cs
- BindingRestrictions.cs
- ToolStripTemplateNode.cs
- DispatcherObject.cs
- Literal.cs
- ComPlusDiagnosticTraceSchemas.cs
- StyleConverter.cs
- Roles.cs
- TextDecoration.cs
- UIElementParaClient.cs
- XmlSchemaExporter.cs
- PeerNameRecord.cs
- Cloud.cs
- ObjectIDGenerator.cs
- LeafCellTreeNode.cs
- FileIOPermission.cs
- XsltArgumentList.cs
- IOThreadScheduler.cs
- StandardTransformFactory.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- log.cs
- PolicyManager.cs
- FlowDocumentPaginator.cs
- CompilationLock.cs
- AmbientProperties.cs
- safelink.cs
- NavigatingCancelEventArgs.cs
- ScalarConstant.cs
- CardSpaceShim.cs
- SrgsNameValueTag.cs
- _TLSstream.cs
- BinaryConverter.cs
- XmlWriterTraceListener.cs
- QueryAccessibilityHelpEvent.cs
- BamlTreeNode.cs
- HttpServerUtilityWrapper.cs
- WindowsAltTab.cs
- SetterBase.cs
- BaseCodePageEncoding.cs
- ChannelServices.cs
- TreeNodeBinding.cs
- ReadOnlyNameValueCollection.cs
- XmlSerializerVersionAttribute.cs
- XmlNamespaceMappingCollection.cs
- SettingsSavedEventArgs.cs
- ContentIterators.cs
- Compiler.cs
- DecoderExceptionFallback.cs
- ProtocolsConfiguration.cs
- NonClientArea.cs
- ByteRangeDownloader.cs
- KeyedByTypeCollection.cs
- BitmapEffect.cs
- LinqDataSourceStatusEventArgs.cs
- EntityViewGenerator.cs
- ToolStripArrowRenderEventArgs.cs
- PackageRelationshipCollection.cs
- VisualTreeHelper.cs
- ProgressBarBrushConverter.cs
- ObjectDataSourceFilteringEventArgs.cs
- PresentationTraceSources.cs
- BamlRecordWriter.cs
- RectangleConverter.cs
- ObjectHandle.cs
- AssemblyBuilder.cs
- MutableAssemblyCacheEntry.cs
- MergeFilterQuery.cs
- OutputCacheProfileCollection.cs
- CodeChecksumPragma.cs
- XmlQueryOutput.cs
- COM2IManagedPerPropertyBrowsingHandler.cs
- GenericPrincipal.cs
- PrintController.cs
- EpmCustomContentSerializer.cs
- ResponseStream.cs
- ProcessProtocolHandler.cs
- SafeNativeMethodsCLR.cs
- QuaternionAnimation.cs
- CheckBox.cs
- EventMappingSettings.cs
- GetPageCompletedEventArgs.cs
- ValidationSummary.cs
- SplineKeyFrames.cs
- EmissiveMaterial.cs
- RSACryptoServiceProvider.cs
- AsymmetricSignatureDeformatter.cs
- JsonServiceDocumentSerializer.cs
- WebPartHelpVerb.cs
- GridViewDeletedEventArgs.cs
- LinearGradientBrush.cs
- ColorMap.cs
- DataServiceQueryProvider.cs
- DbConnectionInternal.cs
- HatchBrush.cs
- HitTestParameters.cs
- InstanceDataCollectionCollection.cs
- Tablet.cs