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
- DescendantOverDescendantQuery.cs
- PackageController.cs
- ProcessHostServerConfig.cs
- AuthorizationRuleCollection.cs
- ThemeDictionaryExtension.cs
- XmlWriterSettings.cs
- AssemblyUtil.cs
- TypeSystem.cs
- BindingManagerDataErrorEventArgs.cs
- XXXOnTypeBuilderInstantiation.cs
- SoapSchemaImporter.cs
- ImageClickEventArgs.cs
- basevalidator.cs
- PolicyStatement.cs
- SqlIdentifier.cs
- DataColumn.cs
- ResourceManagerWrapper.cs
- WindowsMenu.cs
- XmlSchemaInferenceException.cs
- UnmanagedMemoryAccessor.cs
- DataSetMappper.cs
- RawStylusInputReport.cs
- BamlRecordHelper.cs
- OutputCacheSettingsSection.cs
- WindowsUserNameCachingSecurityTokenAuthenticator.cs
- BufferedStream.cs
- MetadataUtil.cs
- Permission.cs
- ImageCodecInfoPrivate.cs
- DoubleStorage.cs
- ServerType.cs
- SaveFileDialog.cs
- Misc.cs
- Point3DIndependentAnimationStorage.cs
- LinkLabel.cs
- TablePatternIdentifiers.cs
- ReflectEventDescriptor.cs
- LicFileLicenseProvider.cs
- CodeDirectiveCollection.cs
- XmlSchemaAttributeGroupRef.cs
- Positioning.cs
- FormViewUpdateEventArgs.cs
- PassportPrincipal.cs
- DetailsViewModeEventArgs.cs
- CultureSpecificStringDictionary.cs
- PrintDialog.cs
- ChineseLunisolarCalendar.cs
- SharedDp.cs
- ControlAdapter.cs
- GlobalEventManager.cs
- Model3D.cs
- ToolStripButton.cs
- InputLangChangeRequestEvent.cs
- LocalizableAttribute.cs
- ExpressionConverter.cs
- ProgramNode.cs
- Part.cs
- JsonByteArrayDataContract.cs
- TemplatedEditableDesignerRegion.cs
- TagNameToTypeMapper.cs
- EntityContainer.cs
- SimpleRecyclingCache.cs
- MimeParameters.cs
- EntityDataSourceDataSelection.cs
- TrustManagerPromptUI.cs
- Task.cs
- BufferedGraphicsContext.cs
- SqlDependencyUtils.cs
- MethodCallTranslator.cs
- InstanceLockException.cs
- CodeMethodReturnStatement.cs
- LinqDataSourceContextData.cs
- TypeLibConverter.cs
- HttpSessionStateWrapper.cs
- Part.cs
- ProxyWebPart.cs
- OdbcEnvironment.cs
- ManifestResourceInfo.cs
- ProviderConnectionPointCollection.cs
- TextInfo.cs
- WindowsAltTab.cs
- InputProcessorProfilesLoader.cs
- ListBindingHelper.cs
- AttributeInfo.cs
- XmlDataContract.cs
- XmlSchemaImporter.cs
- ManualWorkflowSchedulerService.cs
- XmlMembersMapping.cs
- RowsCopiedEventArgs.cs
- LassoHelper.cs
- BufferModeSettings.cs
- PropertyDescriptor.cs
- TickBar.cs
- OdbcReferenceCollection.cs
- BmpBitmapEncoder.cs
- LineServicesCallbacks.cs
- EtwProvider.cs
- ProgressBarBrushConverter.cs
- CriticalExceptions.cs
- OleDbWrapper.cs