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
- DictionaryManager.cs
- AffineTransform3D.cs
- ArrayConverter.cs
- Style.cs
- HtmlInputPassword.cs
- KnownIds.cs
- DataGridTextBoxColumn.cs
- SqlAliaser.cs
- LocalizableResourceBuilder.cs
- FixedSOMSemanticBox.cs
- MinimizableAttributeTypeConverter.cs
- Cursor.cs
- PrintSystemException.cs
- WebResourceUtil.cs
- XmlILStorageConverter.cs
- BatchParser.cs
- GuidTagList.cs
- WeakReadOnlyCollection.cs
- PersonalizationProviderCollection.cs
- TdsValueSetter.cs
- Keywords.cs
- WindowHideOrCloseTracker.cs
- SafeMemoryMappedViewHandle.cs
- HiddenFieldPageStatePersister.cs
- ProtectedConfigurationSection.cs
- SqlUserDefinedTypeAttribute.cs
- SkewTransform.cs
- PkcsUtils.cs
- TextElementEditingBehaviorAttribute.cs
- NullableIntSumAggregationOperator.cs
- SplitterPanel.cs
- _DisconnectOverlappedAsyncResult.cs
- DataGridViewComboBoxColumn.cs
- DeferredTextReference.cs
- FileUpload.cs
- GeometryHitTestResult.cs
- HttpsHostedTransportConfiguration.cs
- InlinedAggregationOperatorEnumerator.cs
- SqlConnectionFactory.cs
- CultureInfo.cs
- ClientConfigurationSystem.cs
- XmlSchemaAttributeGroupRef.cs
- MatrixTransform3D.cs
- oledbconnectionstring.cs
- CanExecuteRoutedEventArgs.cs
- ConstructorExpr.cs
- HtmlElement.cs
- WorkflowPageSetupDialog.cs
- XPathException.cs
- TimelineGroup.cs
- PageThemeCodeDomTreeGenerator.cs
- SecureEnvironment.cs
- SecuritySessionSecurityTokenAuthenticator.cs
- SQLMembershipProvider.cs
- EntityContainerEmitter.cs
- Matrix3DValueSerializer.cs
- BindingContext.cs
- ObjectFullSpanRewriter.cs
- CellTreeNodeVisitors.cs
- FamilyMap.cs
- Cell.cs
- XappLauncher.cs
- XmlAttributeCache.cs
- RootProjectionNode.cs
- CompositeScriptReference.cs
- CompilerTypeWithParams.cs
- ReservationCollection.cs
- XmlConverter.cs
- InvalidComObjectException.cs
- TaskFormBase.cs
- SettingsSavedEventArgs.cs
- ServiceDurableInstance.cs
- EventLogInternal.cs
- GenericXmlSecurityTokenAuthenticator.cs
- ProgressBarHighlightConverter.cs
- ContentValidator.cs
- XamlPoint3DCollectionSerializer.cs
- PixelShader.cs
- base64Transforms.cs
- TextBoxRenderer.cs
- AppearanceEditorPart.cs
- Gdiplus.cs
- WebPartTransformerCollection.cs
- PageFunction.cs
- EdmFunctionAttribute.cs
- HtmlEncodedRawTextWriter.cs
- NullReferenceException.cs
- MonthCalendar.cs
- BinaryObjectInfo.cs
- SelectionUIService.cs
- ErrorInfoXmlDocument.cs
- EmulateRecognizeCompletedEventArgs.cs
- CdpEqualityComparer.cs
- SoapDocumentServiceAttribute.cs
- ObjectDataSourceMethodEventArgs.cs
- HintTextConverter.cs
- GridViewRow.cs
- SimpleBitVector32.cs
- WpfXamlType.cs
- FixedSOMLineRanges.cs