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
- MergablePropertyAttribute.cs
- SystemIcmpV4Statistics.cs
- ProbeDuplexCD1AsyncResult.cs
- SqlProcedureAttribute.cs
- QueryComponents.cs
- XmlWriter.cs
- XmlCharType.cs
- Math.cs
- BitmapCodecInfoInternal.cs
- DefinitionProperties.cs
- Crc32.cs
- CustomAssemblyResolver.cs
- TypeConstant.cs
- DataListItemCollection.cs
- XpsSerializerWriter.cs
- FeatureAttribute.cs
- TagPrefixCollection.cs
- IdentityReference.cs
- RepeatInfo.cs
- OdbcConnectionOpen.cs
- ReflectPropertyDescriptor.cs
- XhtmlBasicImageAdapter.cs
- EdmItemError.cs
- TransportManager.cs
- CellParaClient.cs
- SplitterEvent.cs
- httpserverutility.cs
- PresentationSource.cs
- CachedFontFace.cs
- HttpDebugHandler.cs
- MemberDomainMap.cs
- DynamicMethod.cs
- DataViewSetting.cs
- InternalConfigHost.cs
- PagerSettings.cs
- PerformanceCounterPermissionEntry.cs
- TraceLevelStore.cs
- TagMapInfo.cs
- FigureParaClient.cs
- XmlSchemaExternal.cs
- SemanticResolver.cs
- XsltArgumentList.cs
- PointConverter.cs
- SkipStoryboardToFill.cs
- SizeKeyFrameCollection.cs
- InternalConfigRoot.cs
- CopyOfAction.cs
- Pipe.cs
- BinaryKeyIdentifierClause.cs
- TrackingDataItemValue.cs
- Pair.cs
- DiscoveryDocumentLinksPattern.cs
- TriggerBase.cs
- StatusBarPanel.cs
- TextRunCache.cs
- FlagsAttribute.cs
- ParameterCollectionEditorForm.cs
- CharacterBuffer.cs
- OpacityConverter.cs
- QueuePropertyVariants.cs
- TransformCollection.cs
- HttpRequestWrapper.cs
- SourceFilter.cs
- SecuritySessionServerSettings.cs
- CodeAttributeDeclaration.cs
- HtmlElementEventArgs.cs
- NumberAction.cs
- MultiSelectRootGridEntry.cs
- DrawingDrawingContext.cs
- KeySplineConverter.cs
- Soap.cs
- NumberFormatter.cs
- UriTemplateDispatchFormatter.cs
- XmlStringTable.cs
- __Error.cs
- EdmFunction.cs
- DrawingGroup.cs
- OutputChannel.cs
- ListItemParagraph.cs
- _NegoStream.cs
- TextEditorContextMenu.cs
- BufferedGraphicsManager.cs
- Pen.cs
- SequenceDesignerAccessibleObject.cs
- DataGridViewComboBoxEditingControl.cs
- UserControl.cs
- SessionViewState.cs
- QilValidationVisitor.cs
- TCPListener.cs
- sqlmetadatafactory.cs
- SubtreeProcessor.cs
- BrowserCapabilitiesFactory.cs
- SqlNodeTypeOperators.cs
- IconConverter.cs
- TextDecorationUnitValidation.cs
- ContextMenuAutomationPeer.cs
- TraceHwndHost.cs
- InkCanvasAutomationPeer.cs
- EdmType.cs
- Canvas.cs