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 instance.
protected ReferenceEqualityComparer()
{
}
#endregion Constructors.
#region Properties.
/// 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 ReferenceEqualityComparer instance;
#endregion Private fields.
#region Constructors.
/// Initializes a new instance.
private ReferenceEqualityComparer() : base()
{
}
#endregion Constructors.
#region Properties.
/// Returns a singleton instance for this comparer type.
internal static ReferenceEqualityComparer Instance
{
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 instance.
protected ReferenceEqualityComparer()
{
}
#endregion Constructors.
#region Properties.
/// 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 ReferenceEqualityComparer instance;
#endregion Private fields.
#region Constructors.
/// Initializes a new instance.
private ReferenceEqualityComparer() : base()
{
}
#endregion Constructors.
#region Properties.
/// Returns a singleton instance for this comparer type.
internal static ReferenceEqualityComparer Instance
{
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
- DataRelation.cs
- RootBuilder.cs
- SecurityKeyIdentifierClause.cs
- Executor.cs
- FileChangesMonitor.cs
- HintTextConverter.cs
- XmlSerializerVersionAttribute.cs
- LayoutUtils.cs
- FrameworkElementAutomationPeer.cs
- XhtmlMobileTextWriter.cs
- PageParserFilter.cs
- CancelEventArgs.cs
- Operators.cs
- XmlAttribute.cs
- XmlDataLoader.cs
- SortedDictionary.cs
- FactoryGenerator.cs
- DiffuseMaterial.cs
- SQLMoneyStorage.cs
- DbDataRecord.cs
- PageParserFilter.cs
- ListViewItem.cs
- SettingsProviderCollection.cs
- RequestCachePolicy.cs
- QuaternionAnimationUsingKeyFrames.cs
- BaseProcessor.cs
- SiteMapNode.cs
- EventLogPermission.cs
- ControlTemplate.cs
- ActionItem.cs
- ConfigurationSectionCollection.cs
- StringFormat.cs
- TextContainer.cs
- CommandDesigner.cs
- GCHandleCookieTable.cs
- XmlSerializer.cs
- DesignerAttribute.cs
- WebPartConnectVerb.cs
- SizeChangedEventArgs.cs
- SequentialOutput.cs
- CodeGenerator.cs
- CheckBoxFlatAdapter.cs
- DecimalConstantAttribute.cs
- BindValidator.cs
- OdbcConnectionFactory.cs
- TransactionInterop.cs
- Utils.cs
- TokenizerHelper.cs
- Underline.cs
- SiteMapDataSourceView.cs
- WebPartConnectionsConfigureVerb.cs
- BindingManagerDataErrorEventArgs.cs
- AutomationPropertyChangedEventArgs.cs
- WorkflowValidationFailedException.cs
- TokenBasedSet.cs
- Exceptions.cs
- AddingNewEventArgs.cs
- DataContract.cs
- ImageBrush.cs
- PerformanceCounterPermissionEntry.cs
- PropertyGrid.cs
- MsmqBindingElementBase.cs
- DependencyStoreSurrogate.cs
- IImplicitResourceProvider.cs
- FormView.cs
- WebPartExportVerb.cs
- Int16Converter.cs
- MonthCalendarDesigner.cs
- PopupRoot.cs
- SchemaNotation.cs
- SerializerProvider.cs
- ContentTypeSettingClientMessageFormatter.cs
- UriWriter.cs
- View.cs
- ReflectPropertyDescriptor.cs
- columnmapkeybuilder.cs
- MetabaseSettings.cs
- SoapInteropTypes.cs
- DiscreteKeyFrames.cs
- RawTextInputReport.cs
- X509CertificateStore.cs
- ChineseLunisolarCalendar.cs
- PackWebRequestFactory.cs
- RectAnimationClockResource.cs
- rsa.cs
- WebAdminConfigurationHelper.cs
- ReliableInputConnection.cs
- RecognizedAudio.cs
- XmlObjectSerializerContext.cs
- URLString.cs
- WmpBitmapDecoder.cs
- ImageDrawing.cs
- Schema.cs
- SafeCryptContextHandle.cs
- BindingCompleteEventArgs.cs
- EncodingTable.cs
- RowSpanVector.cs
- ZipIORawDataFileBlock.cs
- PackageDigitalSignature.cs
- OleDbWrapper.cs