Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataEntity / System / Data / Common / Utils / CdpEqualityComparer.cs / 1 / CdpEqualityComparer.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System;
using System.Collections;
using System.Text;
using System.Globalization;
using System.Data.SqlTypes;
using System.Diagnostics;
namespace System.Data.Common.Utils
{
///
/// Equality comparer implementation that uses case-sensitive ordinal comparison for strings.
///
internal sealed class CdpEqualityComparer : IEqualityComparer
{
///
/// Private constructor to ensure comparer is only accessed through the
/// property.
///
private CdpEqualityComparer()
{
}
private static readonly IEqualityComparer s_defaultEqualityComparer = new CdpEqualityComparer();
///
/// Gets instance of CdpEqualityComparer.
///
static internal IEqualityComparer DefaultEqualityComparer { get { return s_defaultEqualityComparer; } }
///
/// This mirrors the .NET implementation of System.Collections.Comparer but
/// uses an ordinal comparer for strings rather than a linguistic compare.
///
/// First object to compare
/// Second object to compare
/// True if the arguments are equivalent; false otherwise
bool IEqualityComparer.Equals(object x, object y)
{
// if the objects are equal by reference, return immediately
if (x == y) { return true; }
// if either one or the other objects is null, return false
// (they cannot both be null, because otherwise the reference equality check
// would have succeeded)
if (null == x || null == y) { return false; }
// if we're dealing with strings, special handling is required
string xAsString = x as string;
if (null != xAsString)
{
string yAsString = y as string;
if (null != yAsString)
{
return StringComparer.Ordinal.Equals(xAsString, yAsString);
}
else
{
// string implements IComparable, so we can avoid a second cast
return 0 == xAsString.CompareTo(y);
}
}
// use first argument as IComparable
IComparable xAsComparable = x as IComparable;
if (null != xAsComparable)
{
return 0 == xAsComparable.CompareTo(y);
}
else
{
// default to Equals implementation
return x.Equals(y);
}
}
///
/// Retursn hash code for given object.
///
/// Object for which to produce hash code (throws if null)
/// Hash code for argument
int IEqualityComparer.GetHashCode(object obj)
{
Debug.Assert(null != obj);
return obj.GetHashCode();
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System;
using System.Collections;
using System.Text;
using System.Globalization;
using System.Data.SqlTypes;
using System.Diagnostics;
namespace System.Data.Common.Utils
{
///
/// Equality comparer implementation that uses case-sensitive ordinal comparison for strings.
///
internal sealed class CdpEqualityComparer : IEqualityComparer
{
///
/// Private constructor to ensure comparer is only accessed through the
/// property.
///
private CdpEqualityComparer()
{
}
private static readonly IEqualityComparer s_defaultEqualityComparer = new CdpEqualityComparer();
///
/// Gets instance of CdpEqualityComparer.
///
static internal IEqualityComparer DefaultEqualityComparer { get { return s_defaultEqualityComparer; } }
///
/// This mirrors the .NET implementation of System.Collections.Comparer but
/// uses an ordinal comparer for strings rather than a linguistic compare.
///
/// First object to compare
/// Second object to compare
/// True if the arguments are equivalent; false otherwise
bool IEqualityComparer.Equals(object x, object y)
{
// if the objects are equal by reference, return immediately
if (x == y) { return true; }
// if either one or the other objects is null, return false
// (they cannot both be null, because otherwise the reference equality check
// would have succeeded)
if (null == x || null == y) { return false; }
// if we're dealing with strings, special handling is required
string xAsString = x as string;
if (null != xAsString)
{
string yAsString = y as string;
if (null != yAsString)
{
return StringComparer.Ordinal.Equals(xAsString, yAsString);
}
else
{
// string implements IComparable, so we can avoid a second cast
return 0 == xAsString.CompareTo(y);
}
}
// use first argument as IComparable
IComparable xAsComparable = x as IComparable;
if (null != xAsComparable)
{
return 0 == xAsComparable.CompareTo(y);
}
else
{
// default to Equals implementation
return x.Equals(y);
}
}
///
/// Retursn hash code for given object.
///
/// Object for which to produce hash code (throws if null)
/// Hash code for argument
int IEqualityComparer.GetHashCode(object obj)
{
Debug.Assert(null != obj);
return obj.GetHashCode();
}
}
}
// 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
- ValueQuery.cs
- XmlLangPropertyAttribute.cs
- DelegateHelpers.Generated.cs
- TypedTableGenerator.cs
- CopyOfAction.cs
- ReturnType.cs
- DataKeyArray.cs
- HtmlInputImage.cs
- ContractCodeDomInfo.cs
- ScrollBarAutomationPeer.cs
- NavigationHelper.cs
- ScriptingWebServicesSectionGroup.cs
- SafeNativeMethodsCLR.cs
- AsyncOperation.cs
- ParameterElementCollection.cs
- DataSourceHelper.cs
- HelpExampleGenerator.cs
- PreviewPageInfo.cs
- OpacityConverter.cs
- Pair.cs
- EndpointConfigContainer.cs
- CategoryNameCollection.cs
- NodeLabelEditEvent.cs
- SwitchExpression.cs
- MessageBuffer.cs
- AncestorChangedEventArgs.cs
- BmpBitmapEncoder.cs
- SoapEnumAttribute.cs
- TextTreeTextBlock.cs
- HwndMouseInputProvider.cs
- StickyNoteHelper.cs
- RequestQueue.cs
- DependencyPropertyKey.cs
- PartialTrustVisibleAssemblyCollection.cs
- AsymmetricAlgorithm.cs
- Single.cs
- ToolStripComboBox.cs
- ColorTransform.cs
- DeferredSelectedIndexReference.cs
- ProviderConnectionPointCollection.cs
- RequestUriProcessor.cs
- mediaclock.cs
- TextTreeTextElementNode.cs
- PngBitmapEncoder.cs
- PrimitiveXmlSerializers.cs
- ConcurrentDictionary.cs
- FileDetails.cs
- ClientApiGenerator.cs
- SecurityStateEncoder.cs
- RetrieveVirtualItemEventArgs.cs
- TextRunTypographyProperties.cs
- DataGridItemCollection.cs
- SqlBuffer.cs
- HiddenFieldPageStatePersister.cs
- _LazyAsyncResult.cs
- JsonByteArrayDataContract.cs
- HttpHandlerAction.cs
- JsonGlobals.cs
- CodeDelegateInvokeExpression.cs
- ProcessProtocolHandler.cs
- ModelFunctionTypeElement.cs
- filewebrequest.cs
- BinaryUtilClasses.cs
- GraphicsContainer.cs
- SingleResultAttribute.cs
- Lookup.cs
- ControlTemplate.cs
- VectorKeyFrameCollection.cs
- Attributes.cs
- ValidationErrorEventArgs.cs
- DateTimePicker.cs
- XmlStreamStore.cs
- UnauthorizedAccessException.cs
- EventManager.cs
- SupportingTokenChannel.cs
- TypeHelpers.cs
- Int32CAMarshaler.cs
- GenericIdentity.cs
- ListViewGroupItemCollection.cs
- SqlException.cs
- LinearGradientBrush.cs
- ConfigurationValue.cs
- WarningException.cs
- X509UI.cs
- HttpListenerResponse.cs
- WsatRegistrationHeader.cs
- Number.cs
- Certificate.cs
- Binding.cs
- ToggleProviderWrapper.cs
- MulticastOption.cs
- TableLayoutStyleCollection.cs
- ConstraintStruct.cs
- KerberosRequestorSecurityToken.cs
- StagingAreaInputItem.cs
- JournalEntry.cs
- _DisconnectOverlappedAsyncResult.cs
- HandleCollector.cs
- AggregateNode.cs
- WorkflowRuntimeServiceElement.cs