Code:
/ 4.0 / 4.0 / 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. //---------------------------------------------------------------------- //. /// // 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
- StringBuilder.cs
- CustomExpression.cs
- JsonFormatReaderGenerator.cs
- PointAnimationUsingKeyFrames.cs
- PropertyEntry.cs
- TextTrailingCharacterEllipsis.cs
- TextTreeUndoUnit.cs
- DbMetaDataCollectionNames.cs
- MouseWheelEventArgs.cs
- AttributeEmitter.cs
- HwndAppCommandInputProvider.cs
- cookie.cs
- WindowsProgressbar.cs
- InteropExecutor.cs
- GridViewColumnCollection.cs
- MessageSecurityOverHttp.cs
- BoundingRectTracker.cs
- SelectionEditingBehavior.cs
- FlagsAttribute.cs
- PropertyGrid.cs
- LoginUtil.cs
- SqlDataSourceQueryEditorForm.cs
- Util.cs
- ExtensionDataObject.cs
- SqlNode.cs
- ApplicationGesture.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- InputScopeAttribute.cs
- SchemaDeclBase.cs
- InfoCardRSACryptoProvider.cs
- ColumnResult.cs
- LineVisual.cs
- WebScriptMetadataMessage.cs
- KnownTypesHelper.cs
- GZipDecoder.cs
- DLinqAssociationProvider.cs
- ProcessRequestArgs.cs
- BaseResourcesBuildProvider.cs
- FileLogRecordHeader.cs
- ByteStreamBufferedMessageData.cs
- SHA256.cs
- EntityCommandCompilationException.cs
- RefExpr.cs
- FormsAuthenticationModule.cs
- ChangeTracker.cs
- RelatedPropertyManager.cs
- PrintPreviewDialog.cs
- ContainerTracking.cs
- MimeParameterWriter.cs
- OleDbReferenceCollection.cs
- UnsafeNativeMethods.cs
- ObjectToIdCache.cs
- FatalException.cs
- SendKeys.cs
- DashStyles.cs
- ResourceManagerWrapper.cs
- DummyDataSource.cs
- DataSourceSelectArguments.cs
- DataGridViewRowStateChangedEventArgs.cs
- BinaryWriter.cs
- InternalDispatchObject.cs
- DecoderReplacementFallback.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- ClientRuntimeConfig.cs
- ExpressionBuilderCollection.cs
- HttpCapabilitiesBase.cs
- ListViewPagedDataSource.cs
- UserControl.cs
- Int32EqualityComparer.cs
- Bidi.cs
- MetaModel.cs
- TableRowsCollectionEditor.cs
- RenderData.cs
- DataGridViewCellConverter.cs
- DetailsViewUpdateEventArgs.cs
- RotateTransform.cs
- FormsAuthenticationConfiguration.cs
- DateTimeFormat.cs
- DrawingContext.cs
- ThreadSafeList.cs
- InvalidDataException.cs
- WmlSelectionListAdapter.cs
- CatalogZoneBase.cs
- ProjectionCamera.cs
- SmiEventSink_Default.cs
- GeometryCombineModeValidation.cs
- FacetDescriptionElement.cs
- BitmapFrameDecode.cs
- WebPartManagerInternals.cs
- TextStore.cs
- OutputScopeManager.cs
- RectValueSerializer.cs
- DesignerSerializationOptionsAttribute.cs
- Vector.cs
- TimeBoundedCache.cs
- Table.cs
- SafeIUnknown.cs
- ComponentDesigner.cs
- Merger.cs
- SoapHttpTransportImporter.cs