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
- ContextMenuStripActionList.cs
- EntitySqlQueryCacheKey.cs
- EntryWrittenEventArgs.cs
- WpfPayload.cs
- C14NUtil.cs
- ExecutedRoutedEventArgs.cs
- ResolveMatchesMessageCD1.cs
- ResizeGrip.cs
- DataObjectAttribute.cs
- ToolStripDropDownMenu.cs
- HandlerWithFactory.cs
- GridViewDeletedEventArgs.cs
- BamlResourceSerializer.cs
- WasHostedComPlusFactory.cs
- RSACryptoServiceProvider.cs
- HtmlForm.cs
- SafeSystemMetrics.cs
- PersistChildrenAttribute.cs
- SettingsPropertyIsReadOnlyException.cs
- DataTableNewRowEvent.cs
- CannotUnloadAppDomainException.cs
- DotAtomReader.cs
- XmlNodeList.cs
- GcHandle.cs
- TextElementEnumerator.cs
- RuntimeVariablesExpression.cs
- OpCellTreeNode.cs
- ChtmlTextBoxAdapter.cs
- XmlParser.cs
- ContextStack.cs
- WindowsPen.cs
- SettingsBase.cs
- EventMappingSettingsCollection.cs
- LowerCaseStringConverter.cs
- TableNameAttribute.cs
- ClientOptions.cs
- WrappedIUnknown.cs
- DirectoryObjectSecurity.cs
- PackagePartCollection.cs
- ConsoleCancelEventArgs.cs
- TextRenderer.cs
- RenderCapability.cs
- AccessedThroughPropertyAttribute.cs
- Subtract.cs
- BindingContext.cs
- GZipDecoder.cs
- CodeStatement.cs
- ServiceMetadataPublishingElement.cs
- ReverseInheritProperty.cs
- DataFieldEditor.cs
- PageCodeDomTreeGenerator.cs
- IconHelper.cs
- PropertyItem.cs
- BindingBase.cs
- EventLogInternal.cs
- MDIControlStrip.cs
- IDReferencePropertyAttribute.cs
- SqlClientWrapperSmiStreamChars.cs
- XmlComplianceUtil.cs
- TraceContext.cs
- XmlnsPrefixAttribute.cs
- EditableTreeList.cs
- _SecureChannel.cs
- TaskSchedulerException.cs
- DLinqTableProvider.cs
- CaseInsensitiveComparer.cs
- MulticastDelegate.cs
- HtmlTableRow.cs
- LockCookie.cs
- WebControlAdapter.cs
- RC2CryptoServiceProvider.cs
- Manipulation.cs
- OnOperation.cs
- RouteItem.cs
- ResourceExpressionBuilder.cs
- IBuiltInEvidence.cs
- PasswordTextNavigator.cs
- DesignerWidgets.cs
- TypeConverters.cs
- SequentialOutput.cs
- TextTreeTextElementNode.cs
- ProfilePropertySettingsCollection.cs
- HtmlImage.cs
- RepeaterItem.cs
- AutomationElementIdentifiers.cs
- FollowerQueueCreator.cs
- DropShadowEffect.cs
- DataPager.cs
- UnionExpr.cs
- MsmqBindingMonitor.cs
- PasswordBox.cs
- baseaxisquery.cs
- OleDbMetaDataFactory.cs
- Int32Animation.cs
- WebPartConnection.cs
- IIS7WorkerRequest.cs
- EventSinkHelperWriter.cs
- QilVisitor.cs
- Utils.cs
- EncodingTable.cs