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
- FileSystemInfo.cs
- BoundColumn.cs
- webproxy.cs
- DesignerView.xaml.cs
- DataGridViewComboBoxCell.cs
- SerializationStore.cs
- NonSerializedAttribute.cs
- BlurBitmapEffect.cs
- XmlSchemaAttribute.cs
- XPathConvert.cs
- TrustManagerPromptUI.cs
- ClientSettingsSection.cs
- ApplicationTrust.cs
- DataGridViewElement.cs
- InputLanguageManager.cs
- EqualityComparer.cs
- SchemaCollectionCompiler.cs
- MemberJoinTreeNode.cs
- UnsafeNetInfoNativeMethods.cs
- DataGridTablesFactory.cs
- SaveFileDialog.cs
- WorkflowRuntimeBehavior.cs
- TableRow.cs
- TypedDataSetSchemaImporterExtensionFx35.cs
- NativeMethods.cs
- Base64Encoder.cs
- MailSettingsSection.cs
- StrictAndMessageFilter.cs
- SerializationEventsCache.cs
- StorageConditionPropertyMapping.cs
- ComboBox.cs
- Attributes.cs
- DefaultEventAttribute.cs
- XsltContext.cs
- BitmapPalette.cs
- WSSecurityTokenSerializer.cs
- WindowsSolidBrush.cs
- SoapTypeAttribute.cs
- RoleGroupCollection.cs
- EventToken.cs
- VerificationAttribute.cs
- XmlDocumentSerializer.cs
- ActivityCodeGenerator.cs
- HwndSourceParameters.cs
- WindowsBrush.cs
- ReliableMessagingVersion.cs
- SystemInfo.cs
- FrameworkElement.cs
- Invariant.cs
- DecoratedNameAttribute.cs
- PrivilegeNotHeldException.cs
- DbParameterHelper.cs
- DataGridViewDesigner.cs
- RenameRuleObjectDialog.Designer.cs
- webeventbuffer.cs
- Thread.cs
- DataGridTextBox.cs
- XmlComplianceUtil.cs
- MessageEventSubscriptionService.cs
- ClientTargetCollection.cs
- HostVisual.cs
- ReturnType.cs
- DataSourceXmlElementAttribute.cs
- BevelBitmapEffect.cs
- LocalizeDesigner.cs
- DescendentsWalkerBase.cs
- ScopelessEnumAttribute.cs
- DataControlFieldCollection.cs
- ApplicationInfo.cs
- FileChangeNotifier.cs
- PrintControllerWithStatusDialog.cs
- PackageStore.cs
- IndexedGlyphRun.cs
- XsltLibrary.cs
- WindowsTitleBar.cs
- ValidationRuleCollection.cs
- ScrollBar.cs
- SettingsBase.cs
- Span.cs
- SystemGatewayIPAddressInformation.cs
- RawStylusInputCustomData.cs
- ContainerActivationHelper.cs
- RootBuilder.cs
- CodeTypeParameter.cs
- RijndaelManaged.cs
- DataSourceHelper.cs
- ScriptBehaviorDescriptor.cs
- DynamicRendererThreadManager.cs
- ExpressionTable.cs
- DaylightTime.cs
- FontFamilyConverter.cs
- HtmlInputHidden.cs
- CommonGetThemePartSize.cs
- PeerPresenceInfo.cs
- DecoderExceptionFallback.cs
- RegexCharClass.cs
- EpmContentSerializer.cs
- IndexOutOfRangeException.cs
- ReflectionTypeLoadException.cs
- webbrowsersite.cs