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
- PlatformCulture.cs
- DynamicActivityProperty.cs
- HttpListenerContext.cs
- DesignerActionUI.cs
- EventToken.cs
- AcceleratedTokenProvider.cs
- InkCanvasFeedbackAdorner.cs
- BitmapEffectvisualstate.cs
- RotateTransform.cs
- Transform3D.cs
- TemplateColumn.cs
- ListControlConvertEventArgs.cs
- BatchWriter.cs
- precedingsibling.cs
- HashUtility.cs
- DataGridAutomationPeer.cs
- LifetimeServices.cs
- Expander.cs
- BitVector32.cs
- SqlDelegatedTransaction.cs
- Identity.cs
- DtdParser.cs
- ByteStack.cs
- StorageFunctionMapping.cs
- AsyncContentLoadedEventArgs.cs
- ObjectManager.cs
- ProfilePropertySettingsCollection.cs
- Brush.cs
- StickyNoteAnnotations.cs
- ComponentDispatcherThread.cs
- DrawItemEvent.cs
- GatewayIPAddressInformationCollection.cs
- CodeChecksumPragma.cs
- DeliveryStrategy.cs
- JpegBitmapDecoder.cs
- LogEntryHeaderDeserializer.cs
- RawStylusInput.cs
- HorizontalAlignConverter.cs
- ThaiBuddhistCalendar.cs
- MessageBox.cs
- TemplateControl.cs
- XmlSchemaSet.cs
- XmlMemberMapping.cs
- X509ScopedServiceCertificateElement.cs
- LightweightCodeGenerator.cs
- FrugalList.cs
- XmlSchemaChoice.cs
- StringStorage.cs
- ThousandthOfEmRealPoints.cs
- DataGrid.cs
- Canvas.cs
- AddingNewEventArgs.cs
- AnnotationResource.cs
- PackageDigitalSignatureManager.cs
- HttpCookiesSection.cs
- WebProxyScriptElement.cs
- XmlSchemaIdentityConstraint.cs
- StrokeCollectionDefaultValueFactory.cs
- ToolTipService.cs
- fixedPageContentExtractor.cs
- DBConnection.cs
- FixedSOMLineRanges.cs
- UriSectionReader.cs
- DataException.cs
- PolicyStatement.cs
- TextEditorSpelling.cs
- StaticFileHandler.cs
- SpeakProgressEventArgs.cs
- ChooseAction.cs
- ArrangedElementCollection.cs
- ObjectAnimationBase.cs
- ObjectSecurity.cs
- SvcMapFile.cs
- RijndaelManagedTransform.cs
- WebPartDescription.cs
- ResourceReferenceExpression.cs
- DiagnosticsConfiguration.cs
- DbDataSourceEnumerator.cs
- EmptyCollection.cs
- Inline.cs
- cookie.cs
- DirectionalLight.cs
- CodeStatement.cs
- Converter.cs
- ContentType.cs
- WindowsPrincipal.cs
- WsatAdminException.cs
- MultiDataTrigger.cs
- contentDescriptor.cs
- CodeEntryPointMethod.cs
- ContextMenuStrip.cs
- SqlConnectionHelper.cs
- ControlIdConverter.cs
- GeneralTransform3DGroup.cs
- MenuItem.cs
- SystemNetHelpers.cs
- AsyncMethodInvoker.cs
- prefixendpointaddressmessagefilter.cs
- DataGridItemEventArgs.cs
- TargetControlTypeAttribute.cs