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
- XmlHierarchyData.cs
- DataServiceQueryOfT.cs
- LiteralControl.cs
- MultipartIdentifier.cs
- PointAnimation.cs
- ToggleButtonAutomationPeer.cs
- SafeNativeMethodsCLR.cs
- StreamHelper.cs
- ClientOptions.cs
- Triplet.cs
- CultureSpecificCharacterBufferRange.cs
- BindingMemberInfo.cs
- CodeTypeOfExpression.cs
- EntitySet.cs
- FilteredAttributeCollection.cs
- HttpFileCollection.cs
- FontSource.cs
- PageThemeBuildProvider.cs
- BindableTemplateBuilder.cs
- AppDomainUnloadedException.cs
- IssuedTokenServiceCredential.cs
- ProfileProvider.cs
- WindowsComboBox.cs
- UidManager.cs
- sqlnorm.cs
- SrgsToken.cs
- CheckBoxFlatAdapter.cs
- StoryFragments.cs
- ViewCellRelation.cs
- IriParsingElement.cs
- CompositeCollectionView.cs
- LabelAutomationPeer.cs
- UpdatePanelTrigger.cs
- WindowsFormsHelpers.cs
- SocketInformation.cs
- DesignerForm.cs
- ClientSettingsStore.cs
- _DomainName.cs
- SocketElement.cs
- MatrixTransform.cs
- DesignerActionList.cs
- CommentAction.cs
- ObjectIDGenerator.cs
- BaseInfoTable.cs
- TcpServerChannel.cs
- X509CertificateCollection.cs
- InputBinding.cs
- ProxyAttribute.cs
- RangeValuePattern.cs
- ShaperBuffers.cs
- CodePageUtils.cs
- SqlBooleanMismatchVisitor.cs
- SimpleLine.cs
- OrderByLifter.cs
- SystemColorTracker.cs
- CultureSpecificStringDictionary.cs
- ParallelEnumerableWrapper.cs
- ErrorActivity.cs
- Parser.cs
- JulianCalendar.cs
- ClipboardData.cs
- DataBindingExpressionBuilder.cs
- ColumnCollection.cs
- EntityStoreSchemaFilterEntry.cs
- ConfigurationElementCollection.cs
- DateBoldEvent.cs
- DeviceContext2.cs
- WindowsStreamSecurityUpgradeProvider.cs
- JsonFormatWriterGenerator.cs
- XmlReflectionMember.cs
- ServiceModelStringsVersion1.cs
- LoginUtil.cs
- CharEntityEncoderFallback.cs
- PropertyGridView.cs
- ExtentCqlBlock.cs
- FtpRequestCacheValidator.cs
- Deflater.cs
- PlainXmlDeserializer.cs
- AsyncCompletedEventArgs.cs
- HtmlElementCollection.cs
- WindowPatternIdentifiers.cs
- ValidatorCompatibilityHelper.cs
- TypeUsage.cs
- SeekableReadStream.cs
- InternalControlCollection.cs
- ExpressionVisitor.cs
- StateChangeEvent.cs
- RoleManagerModule.cs
- FormsAuthenticationUserCollection.cs
- MimeAnyImporter.cs
- CaseInsensitiveHashCodeProvider.cs
- DbDataAdapter.cs
- Timer.cs
- AspNetHostingPermission.cs
- IdnElement.cs
- ReservationCollection.cs
- SQLBinaryStorage.cs
- NonParentingControl.cs
- XmlSortKey.cs
- ElementFactory.cs