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 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
- FileSystemInfo.cs
- EventWaitHandle.cs
- XmlQualifiedName.cs
- KeyInstance.cs
- HttpException.cs
- ForwardPositionQuery.cs
- LineMetrics.cs
- ReadOnlyDataSourceView.cs
- QueryableDataSourceEditData.cs
- EditorReuseAttribute.cs
- MimeBasePart.cs
- LayoutEvent.cs
- ScopeElement.cs
- CompositeFontInfo.cs
- GestureRecognitionResult.cs
- RequestUriProcessor.cs
- FamilyCollection.cs
- TraceListener.cs
- RayMeshGeometry3DHitTestResult.cs
- SqlConnectionManager.cs
- ExpressionDumper.cs
- ListViewTableRow.cs
- BuildProvidersCompiler.cs
- StreamWriter.cs
- BinHexEncoder.cs
- DataGridAutoFormat.cs
- DbParameterCollection.cs
- Stackframe.cs
- StorageFunctionMapping.cs
- AttributeProviderAttribute.cs
- DataKey.cs
- RtfFormatStack.cs
- DataRow.cs
- IISUnsafeMethods.cs
- MsmqProcessProtocolHandler.cs
- DeclaredTypeElementCollection.cs
- GACMembershipCondition.cs
- SessionStateModule.cs
- X509Certificate.cs
- TargetPerspective.cs
- LogWriteRestartAreaAsyncResult.cs
- MarkupCompiler.cs
- mediaeventargs.cs
- InkCanvasSelectionAdorner.cs
- SymLanguageType.cs
- ScrollableControl.cs
- WsdlInspector.cs
- SqlError.cs
- SecurityContext.cs
- BindUriHelper.cs
- DateTimeConverter.cs
- WindowsContainer.cs
- Membership.cs
- ExpressionEvaluator.cs
- PrintPreviewGraphics.cs
- RotateTransform.cs
- IgnoreDeviceFilterElement.cs
- NumericExpr.cs
- InternalEnumValidator.cs
- XmlBindingWorker.cs
- Roles.cs
- ActiveDocumentEvent.cs
- GlobalEventManager.cs
- Wizard.cs
- ResourceProviderFactory.cs
- Viewport3DAutomationPeer.cs
- PropertyInformationCollection.cs
- InstalledFontCollection.cs
- Light.cs
- WindowsIPAddress.cs
- ModelToObjectValueConverter.cs
- PhonemeConverter.cs
- HostedHttpContext.cs
- log.cs
- PerspectiveCamera.cs
- SqlComparer.cs
- ApplyTemplatesAction.cs
- StyleModeStack.cs
- SafeNativeMethods.cs
- ClaimTypes.cs
- FunctionImportMapping.cs
- CalloutQueueItem.cs
- SocketInformation.cs
- JpegBitmapEncoder.cs
- SelectionPatternIdentifiers.cs
- PartialToken.cs
- CommonRemoteMemoryBlock.cs
- TextElement.cs
- WpfGeneratedKnownTypes.cs
- StoreItemCollection.Loader.cs
- AlignmentYValidation.cs
- GatewayIPAddressInformationCollection.cs
- RedistVersionInfo.cs
- DesignerActionUIStateChangeEventArgs.cs
- PageSetupDialog.cs
- BoolLiteral.cs
- RegularExpressionValidator.cs
- BamlStream.cs
- CatchDesigner.xaml.cs
- QilTargetType.cs