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
- ReadOnlyHierarchicalDataSourceView.cs
- TableCellCollection.cs
- Zone.cs
- LightweightCodeGenerator.cs
- TableLayout.cs
- AssemblyResourceLoader.cs
- CodeConditionStatement.cs
- NullRuntimeConfig.cs
- TreeWalkHelper.cs
- InternalConfigHost.cs
- GridViewRowPresenterBase.cs
- PathFigure.cs
- HttpListenerException.cs
- Metafile.cs
- PackageDigitalSignatureManager.cs
- httpapplicationstate.cs
- WindowsClaimSet.cs
- regiisutil.cs
- ComponentResourceManager.cs
- ActivityExecutor.cs
- DataKeyCollection.cs
- GridEntryCollection.cs
- IdentityManager.cs
- InputMethodStateChangeEventArgs.cs
- SecurityProtocol.cs
- CultureInfo.cs
- LineBreak.cs
- Oid.cs
- ArithmeticLiteral.cs
- MonitoringDescriptionAttribute.cs
- Block.cs
- WorkflowElementDialogWindow.xaml.cs
- ListBase.cs
- PlatformNotSupportedException.cs
- ObjectPersistData.cs
- Interlocked.cs
- DbDeleteCommandTree.cs
- RangeValidator.cs
- GuidTagList.cs
- WindowCollection.cs
- HttpInputStream.cs
- BackStopAuthenticationModule.cs
- XslCompiledTransform.cs
- NativeMethodsOther.cs
- ValueChangedEventManager.cs
- IInstanceTable.cs
- Preprocessor.cs
- XmlSchemaComplexContentRestriction.cs
- DateTimeParse.cs
- CellParagraph.cs
- LocalClientSecuritySettingsElement.cs
- GridLength.cs
- ProtocolsSection.cs
- Variable.cs
- BamlLocalizer.cs
- TransportConfigurationTypeElementCollection.cs
- AssociatedControlConverter.cs
- SimpleType.cs
- dataprotectionpermissionattribute.cs
- AdRotator.cs
- ApplicationInfo.cs
- XmlSchemaProviderAttribute.cs
- DbConnectionHelper.cs
- DesignerVerbCollection.cs
- FixedStringLookup.cs
- ObjectStateManagerMetadata.cs
- HyperLink.cs
- EasingQuaternionKeyFrame.cs
- ListViewGroupConverter.cs
- SubpageParaClient.cs
- AnnotationService.cs
- JsonReaderDelegator.cs
- WeakEventManager.cs
- InternalsVisibleToAttribute.cs
- RealProxy.cs
- VBIdentifierName.cs
- MonitorWrapper.cs
- PersianCalendar.cs
- MatrixIndependentAnimationStorage.cs
- RegexNode.cs
- DoubleUtil.cs
- TreeSet.cs
- GridItemPatternIdentifiers.cs
- XmlExceptionHelper.cs
- RecordManager.cs
- TreeNodeStyle.cs
- PathSegmentCollection.cs
- InternalException.cs
- AutomationPatternInfo.cs
- SchemaNamespaceManager.cs
- StringDictionaryCodeDomSerializer.cs
- MembershipSection.cs
- HyperLinkStyle.cs
- BitmapEffectDrawingContent.cs
- DataProtection.cs
- FaultPropagationQuery.cs
- __ComObject.cs
- DocumentApplication.cs
- ContextMenu.cs
- MdiWindowListItemConverter.cs