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
- ToolBarTray.cs
- GB18030Encoding.cs
- ResXBuildProvider.cs
- SchemaTableOptionalColumn.cs
- Buffer.cs
- DataObjectSettingDataEventArgs.cs
- CachedPathData.cs
- FactoryMaker.cs
- QueryOperationResponseOfT.cs
- RegisteredExpandoAttribute.cs
- FolderBrowserDialog.cs
- SqlRemoveConstantOrderBy.cs
- HashCodeCombiner.cs
- CodeCommentStatement.cs
- TrackingParameters.cs
- StandardBindingElementCollection.cs
- ToolboxItemLoader.cs
- AmbiguousMatchException.cs
- SRef.cs
- BinaryFormatter.cs
- NativeObjectSecurity.cs
- AlphabeticalEnumConverter.cs
- XmlHierarchyData.cs
- CodeDelegateCreateExpression.cs
- SubstitutionList.cs
- BuildManagerHost.cs
- ScrollItemPattern.cs
- PointValueSerializer.cs
- Bezier.cs
- DataServiceCollectionOfT.cs
- SystemWebCachingSectionGroup.cs
- MetadataItemSerializer.cs
- EventsTab.cs
- SearchForVirtualItemEventArgs.cs
- TreeNodeClickEventArgs.cs
- MenuItem.cs
- Scene3D.cs
- CacheRequest.cs
- XslTransform.cs
- InputDevice.cs
- SqlNodeAnnotations.cs
- VSWCFServiceContractGenerator.cs
- wgx_commands.cs
- OrderedDictionary.cs
- DropShadowBitmapEffect.cs
- ApplicationServicesHostFactory.cs
- Clock.cs
- ISessionStateStore.cs
- SystemTcpStatistics.cs
- ElementNotAvailableException.cs
- MonitoringDescriptionAttribute.cs
- DropSource.cs
- XmlElementList.cs
- XmlAttributeCache.cs
- XmlQualifiedName.cs
- WebBrowserNavigatingEventHandler.cs
- RecordBuilder.cs
- StyleXamlTreeBuilder.cs
- SQLGuid.cs
- BeginEvent.cs
- DropTarget.cs
- TimerElapsedEvenArgs.cs
- SafeMarshalContext.cs
- IxmlLineInfo.cs
- PageEventArgs.cs
- DbConnectionPoolGroup.cs
- SqlXmlStorage.cs
- OwnerDrawPropertyBag.cs
- RoutedCommand.cs
- HostedNamedPipeTransportManager.cs
- Transform3D.cs
- GeneralTransform3DGroup.cs
- WebMessageEncodingBindingElement.cs
- XmlSchemaSimpleType.cs
- ListSourceHelper.cs
- ListDictionary.cs
- CmsUtils.cs
- ReflectPropertyDescriptor.cs
- HostedTcpTransportManager.cs
- WebEventTraceProvider.cs
- UnwrappedTypesXmlSerializerManager.cs
- CalendarDateRangeChangingEventArgs.cs
- Sequence.cs
- ChangeBlockUndoRecord.cs
- GridViewItemAutomationPeer.cs
- ComPlusTypeLoader.cs
- ListViewDataItem.cs
- BigInt.cs
- DataBoundControl.cs
- GZipDecoder.cs
- HyperLinkColumn.cs
- UrlAuthFailedErrorFormatter.cs
- WmlControlAdapter.cs
- SqlPersonalizationProvider.cs
- ProviderConnectionPoint.cs
- CharKeyFrameCollection.cs
- DatatypeImplementation.cs
- ClientConfigurationSystem.cs
- CodeCommentStatement.cs
- SqlInternalConnectionSmi.cs