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
- JumpTask.cs
- SamlSecurityTokenAuthenticator.cs
- SystemResources.cs
- SqlBulkCopyColumnMapping.cs
- ValidateNames.cs
- ToolStripContentPanelRenderEventArgs.cs
- SvcMapFileSerializer.cs
- configsystem.cs
- BookmarkNameHelper.cs
- ListViewItem.cs
- ByteRangeDownloader.cs
- DbCommandDefinition.cs
- TextEditorLists.cs
- GetMemberBinder.cs
- OpCellTreeNode.cs
- CacheRequest.cs
- EntityClientCacheKey.cs
- Int16.cs
- TypeConverterHelper.cs
- ToolStripProgressBar.cs
- PersonalizationState.cs
- WebRequestModulesSection.cs
- ToolStripManager.cs
- MetadataSource.cs
- FixedSOMFixedBlock.cs
- HwndHostAutomationPeer.cs
- FacetValues.cs
- BufferedGraphics.cs
- CqlQuery.cs
- TreeViewImageIndexConverter.cs
- TextEditorMouse.cs
- FreezableOperations.cs
- ValidatingReaderNodeData.cs
- ComplexType.cs
- SafeHGlobalHandleCritical.cs
- LinkClickEvent.cs
- webeventbuffer.cs
- RenderData.cs
- SiteMapDesignerDataSourceView.cs
- CommonRemoteMemoryBlock.cs
- MouseGesture.cs
- HttpFileCollection.cs
- WorkflowQueue.cs
- GridViewRow.cs
- IconEditor.cs
- ElementUtil.cs
- WindowsTokenRoleProvider.cs
- RegisteredHiddenField.cs
- DBNull.cs
- PathGeometry.cs
- SmtpNtlmAuthenticationModule.cs
- PasswordRecoveryAutoFormat.cs
- MetricEntry.cs
- WsdlBuildProvider.cs
- BamlResourceContent.cs
- Selection.cs
- SignatureTargetIdManager.cs
- TriggerAction.cs
- SqlDataReaderSmi.cs
- TreeNodeCollection.cs
- LeafCellTreeNode.cs
- DeferredBinaryDeserializerExtension.cs
- ErrorInfoXmlDocument.cs
- MultiPageTextView.cs
- DataGridViewCellCollection.cs
- DbMetaDataCollectionNames.cs
- SqlDependency.cs
- UseLicense.cs
- TransactionsSectionGroup.cs
- MsmqIntegrationProcessProtocolHandler.cs
- SecurityContext.cs
- TypeUtil.cs
- ListViewGroupConverter.cs
- ClientCultureInfo.cs
- OdbcUtils.cs
- ConnectionPoolManager.cs
- MethodRental.cs
- Column.cs
- ExtenderHelpers.cs
- _UncName.cs
- TimeZone.cs
- Cursor.cs
- BindingRestrictions.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- DataGridAddNewRow.cs
- ExternalCalls.cs
- ReadOnlyTernaryTree.cs
- ListViewSortEventArgs.cs
- QilList.cs
- SimpleType.cs
- LockCookie.cs
- remotingproxy.cs
- TimeSpanMinutesOrInfiniteConverter.cs
- AnimationClock.cs
- ListItemsPage.cs
- IPAddressCollection.cs
- Quaternion.cs
- UnicodeEncoding.cs
- UniqueID.cs
- FileResponseElement.cs