Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / System / StringComparer.cs / 1305376 / StringComparer.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== namespace System { using System.Collections; using System.Collections.Generic; using System.Globalization; using System.Diagnostics.Contracts; [Serializable] [System.Runtime.InteropServices.ComVisible(true)] public abstract class StringComparer : IComparer, IEqualityComparer, IComparer, IEqualityComparer { private static readonly StringComparer _invariantCulture = new CultureAwareComparer(CultureInfo.InvariantCulture, false); private static readonly StringComparer _invariantCultureIgnoreCase = new CultureAwareComparer(CultureInfo.InvariantCulture, true); private static readonly StringComparer _ordinal = new OrdinalComparer(false); private static readonly StringComparer _ordinalIgnoreCase = new OrdinalComparer(true); public static StringComparer InvariantCulture { get { Contract.Ensures(Contract.Result () != null); return _invariantCulture; } } public static StringComparer InvariantCultureIgnoreCase { get { Contract.Ensures(Contract.Result () != null); return _invariantCultureIgnoreCase; } } public static StringComparer CurrentCulture { get { Contract.Ensures(Contract.Result () != null); return new CultureAwareComparer(CultureInfo.CurrentCulture, false); } } public static StringComparer CurrentCultureIgnoreCase { get { Contract.Ensures(Contract.Result () != null); return new CultureAwareComparer(CultureInfo.CurrentCulture, true); } } public static StringComparer Ordinal { get { Contract.Ensures(Contract.Result () != null); return _ordinal; } } public static StringComparer OrdinalIgnoreCase { get { Contract.Ensures(Contract.Result () != null); return _ordinalIgnoreCase; } } public static StringComparer Create(CultureInfo culture, bool ignoreCase) { if( culture == null) { throw new ArgumentNullException("culture"); } Contract.Ensures(Contract.Result () != null); Contract.EndContractBlock(); return new CultureAwareComparer(culture, ignoreCase); } public int Compare(object x, object y) { if (x == y) return 0; if (x == null) return -1; if (y == null) return 1; String sa = x as String; if (sa != null) { String sb = y as String; if( sb != null) { return Compare(sa, sb); } } IComparable ia = x as IComparable; if (ia != null) { return ia.CompareTo(y); } throw new ArgumentException(Environment.GetResourceString("Argument_ImplementIComparable")); } public new bool Equals(Object x, Object y) { if (x == y) return true; if (x == null || y == null) return false; String sa = x as String; if (sa != null) { String sb = y as String; if( sb != null) { return Equals(sa, sb); } } return x.Equals(y); } public int GetHashCode(object obj) { if( obj == null) { throw new ArgumentNullException("obj"); } Contract.EndContractBlock(); string s = obj as string; if( s != null) { return GetHashCode(s); } return obj.GetHashCode(); } public abstract int Compare(String x, String y); public abstract bool Equals(String x, String y); public abstract int GetHashCode(string obj); } [Serializable] internal sealed class CultureAwareComparer : StringComparer { private CompareInfo _compareInfo; private bool _ignoreCase; internal CultureAwareComparer(CultureInfo culture, bool ignoreCase) { _compareInfo = culture.CompareInfo; _ignoreCase = ignoreCase; } public override int Compare(string x, string y) { if (Object.ReferenceEquals(x, y)) return 0; if (x == null) return -1; if (y == null) return 1; return _compareInfo.Compare(x, y, _ignoreCase? CompareOptions.IgnoreCase : CompareOptions.None); } public override bool Equals(string x, string y) { if (Object.ReferenceEquals(x ,y)) return true; if (x == null || y == null) return false; return (_compareInfo.Compare(x, y, _ignoreCase? CompareOptions.IgnoreCase : CompareOptions.None) == 0); } public override int GetHashCode(string obj) { if( obj == null) { throw new ArgumentNullException("obj"); } Contract.EndContractBlock(); if( _ignoreCase) { return _compareInfo.GetHashCodeOfString(obj, CompareOptions.IgnoreCase); } return _compareInfo.GetHashCodeOfString(obj, CompareOptions.None); } // Equals method for the comparer itself. public override bool Equals(Object obj){ CultureAwareComparer comparer = obj as CultureAwareComparer; if( comparer == null) { return false; } return (this._ignoreCase == comparer._ignoreCase) && ( this._compareInfo.Equals(comparer._compareInfo)); } public override int GetHashCode() { int hashCode = _compareInfo.GetHashCode() ; return _ignoreCase ? (~hashCode) : hashCode; } } // Provide x more optimal implementation of ordinal comparison. [Serializable] internal sealed class OrdinalComparer : StringComparer { private bool _ignoreCase; internal OrdinalComparer(bool ignoreCase) { _ignoreCase = ignoreCase; } public override int Compare(string x, string y) { if (Object.ReferenceEquals(x, y)) return 0; if (x == null) return -1; if (y == null) return 1; if( _ignoreCase) { return String.Compare(x, y, StringComparison.OrdinalIgnoreCase); } return String.CompareOrdinal(x, y); } public override bool Equals(string x, string y) { if (Object.ReferenceEquals(x ,y)) return true; if (x == null || y == null) return false; if( _ignoreCase) { if( x.Length != y.Length) { return false; } return (String.Compare(x, y, StringComparison.OrdinalIgnoreCase) == 0); } return x.Equals(y); } public override int GetHashCode(string obj) { if( obj == null) { throw new ArgumentNullException("obj"); } Contract.EndContractBlock(); if( _ignoreCase) { return TextInfo.GetHashCodeOrdinalIgnoreCase(obj); } return obj.GetHashCode(); } // Equals method for the comparer itself. public override bool Equals(Object obj){ OrdinalComparer comparer = obj as OrdinalComparer; if( comparer == null) { return false; } return (this._ignoreCase == comparer._ignoreCase); } public override int GetHashCode() { string name = "OrdinalComparer"; int hashCode = name.GetHashCode(); return _ignoreCase ? (~hashCode) : hashCode; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== namespace System { using System.Collections; using System.Collections.Generic; using System.Globalization; using System.Diagnostics.Contracts; [Serializable] [System.Runtime.InteropServices.ComVisible(true)] public abstract class StringComparer : IComparer, IEqualityComparer, IComparer , IEqualityComparer { private static readonly StringComparer _invariantCulture = new CultureAwareComparer(CultureInfo.InvariantCulture, false); private static readonly StringComparer _invariantCultureIgnoreCase = new CultureAwareComparer(CultureInfo.InvariantCulture, true); private static readonly StringComparer _ordinal = new OrdinalComparer(false); private static readonly StringComparer _ordinalIgnoreCase = new OrdinalComparer(true); public static StringComparer InvariantCulture { get { Contract.Ensures(Contract.Result () != null); return _invariantCulture; } } public static StringComparer InvariantCultureIgnoreCase { get { Contract.Ensures(Contract.Result () != null); return _invariantCultureIgnoreCase; } } public static StringComparer CurrentCulture { get { Contract.Ensures(Contract.Result () != null); return new CultureAwareComparer(CultureInfo.CurrentCulture, false); } } public static StringComparer CurrentCultureIgnoreCase { get { Contract.Ensures(Contract.Result () != null); return new CultureAwareComparer(CultureInfo.CurrentCulture, true); } } public static StringComparer Ordinal { get { Contract.Ensures(Contract.Result () != null); return _ordinal; } } public static StringComparer OrdinalIgnoreCase { get { Contract.Ensures(Contract.Result () != null); return _ordinalIgnoreCase; } } public static StringComparer Create(CultureInfo culture, bool ignoreCase) { if( culture == null) { throw new ArgumentNullException("culture"); } Contract.Ensures(Contract.Result () != null); Contract.EndContractBlock(); return new CultureAwareComparer(culture, ignoreCase); } public int Compare(object x, object y) { if (x == y) return 0; if (x == null) return -1; if (y == null) return 1; String sa = x as String; if (sa != null) { String sb = y as String; if( sb != null) { return Compare(sa, sb); } } IComparable ia = x as IComparable; if (ia != null) { return ia.CompareTo(y); } throw new ArgumentException(Environment.GetResourceString("Argument_ImplementIComparable")); } public new bool Equals(Object x, Object y) { if (x == y) return true; if (x == null || y == null) return false; String sa = x as String; if (sa != null) { String sb = y as String; if( sb != null) { return Equals(sa, sb); } } return x.Equals(y); } public int GetHashCode(object obj) { if( obj == null) { throw new ArgumentNullException("obj"); } Contract.EndContractBlock(); string s = obj as string; if( s != null) { return GetHashCode(s); } return obj.GetHashCode(); } public abstract int Compare(String x, String y); public abstract bool Equals(String x, String y); public abstract int GetHashCode(string obj); } [Serializable] internal sealed class CultureAwareComparer : StringComparer { private CompareInfo _compareInfo; private bool _ignoreCase; internal CultureAwareComparer(CultureInfo culture, bool ignoreCase) { _compareInfo = culture.CompareInfo; _ignoreCase = ignoreCase; } public override int Compare(string x, string y) { if (Object.ReferenceEquals(x, y)) return 0; if (x == null) return -1; if (y == null) return 1; return _compareInfo.Compare(x, y, _ignoreCase? CompareOptions.IgnoreCase : CompareOptions.None); } public override bool Equals(string x, string y) { if (Object.ReferenceEquals(x ,y)) return true; if (x == null || y == null) return false; return (_compareInfo.Compare(x, y, _ignoreCase? CompareOptions.IgnoreCase : CompareOptions.None) == 0); } public override int GetHashCode(string obj) { if( obj == null) { throw new ArgumentNullException("obj"); } Contract.EndContractBlock(); if( _ignoreCase) { return _compareInfo.GetHashCodeOfString(obj, CompareOptions.IgnoreCase); } return _compareInfo.GetHashCodeOfString(obj, CompareOptions.None); } // Equals method for the comparer itself. public override bool Equals(Object obj){ CultureAwareComparer comparer = obj as CultureAwareComparer; if( comparer == null) { return false; } return (this._ignoreCase == comparer._ignoreCase) && ( this._compareInfo.Equals(comparer._compareInfo)); } public override int GetHashCode() { int hashCode = _compareInfo.GetHashCode() ; return _ignoreCase ? (~hashCode) : hashCode; } } // Provide x more optimal implementation of ordinal comparison. [Serializable] internal sealed class OrdinalComparer : StringComparer { private bool _ignoreCase; internal OrdinalComparer(bool ignoreCase) { _ignoreCase = ignoreCase; } public override int Compare(string x, string y) { if (Object.ReferenceEquals(x, y)) return 0; if (x == null) return -1; if (y == null) return 1; if( _ignoreCase) { return String.Compare(x, y, StringComparison.OrdinalIgnoreCase); } return String.CompareOrdinal(x, y); } public override bool Equals(string x, string y) { if (Object.ReferenceEquals(x ,y)) return true; if (x == null || y == null) return false; if( _ignoreCase) { if( x.Length != y.Length) { return false; } return (String.Compare(x, y, StringComparison.OrdinalIgnoreCase) == 0); } return x.Equals(y); } public override int GetHashCode(string obj) { if( obj == null) { throw new ArgumentNullException("obj"); } Contract.EndContractBlock(); if( _ignoreCase) { return TextInfo.GetHashCodeOrdinalIgnoreCase(obj); } return obj.GetHashCode(); } // Equals method for the comparer itself. public override bool Equals(Object obj){ OrdinalComparer comparer = obj as OrdinalComparer; if( comparer == null) { return false; } return (this._ignoreCase == comparer._ignoreCase); } public override int GetHashCode() { string name = "OrdinalComparer"; int hashCode = name.GetHashCode(); return _ignoreCase ? (~hashCode) : hashCode; } } } // 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
- UpdateException.cs
- SimpleTypesSurrogate.cs
- PolyLineSegmentFigureLogic.cs
- ADRole.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- CounterSampleCalculator.cs
- PiiTraceSource.cs
- SqlNotificationRequest.cs
- ContextMarshalException.cs
- AssemblyNameProxy.cs
- RecoverInstanceLocksCommand.cs
- PeerCredential.cs
- ConsoleTraceListener.cs
- TrustSection.cs
- RunClient.cs
- HTMLTextWriter.cs
- FormatterServices.cs
- CaseStatementProjectedSlot.cs
- RoutedEventConverter.cs
- TraceShell.cs
- ConnectionString.cs
- CharacterShapingProperties.cs
- ItemChangedEventArgs.cs
- SAPICategories.cs
- UdpConstants.cs
- AbstractExpressions.cs
- SHA512.cs
- TableAdapterManagerMethodGenerator.cs
- x509store.cs
- OpCodes.cs
- ServiceProviders.cs
- Input.cs
- ProcessModuleCollection.cs
- SEHException.cs
- FontFamilyConverter.cs
- _HelperAsyncResults.cs
- WebPartDeleteVerb.cs
- EmptyReadOnlyDictionaryInternal.cs
- XsltCompileContext.cs
- TableHeaderCell.cs
- HtmlTernaryTree.cs
- XmlDataDocument.cs
- NetworkInformationException.cs
- AvtEvent.cs
- _SafeNetHandles.cs
- ProjectionCamera.cs
- MemberListBinding.cs
- ClientSponsor.cs
- HttpCookie.cs
- RotateTransform3D.cs
- GZipDecoder.cs
- GregorianCalendar.cs
- UserCancellationException.cs
- SchemaNotation.cs
- X509ChainElement.cs
- Choices.cs
- ToolboxComponentsCreatingEventArgs.cs
- LogEntryUtils.cs
- UnsafeNativeMethods.cs
- BaseComponentEditor.cs
- CanonicalXml.cs
- GatewayDefinition.cs
- SqlDataSourceCache.cs
- xmlfixedPageInfo.cs
- PlatformCulture.cs
- Substitution.cs
- SerializationEventsCache.cs
- securitycriticaldataClass.cs
- OutputCacheProfile.cs
- CryptoProvider.cs
- VariantWrapper.cs
- BaseTemplateCodeDomTreeGenerator.cs
- DeviceOverridableAttribute.cs
- XamlFrame.cs
- UrlMappingsModule.cs
- FlowDocumentScrollViewer.cs
- XPathMultyIterator.cs
- TaskCanceledException.cs
- IconBitmapDecoder.cs
- XmlTypeAttribute.cs
- BooleanToSelectiveScrollingOrientationConverter.cs
- SqlCacheDependencyDatabase.cs
- DataControlButton.cs
- ItemsControlAutomationPeer.cs
- AmbientProperties.cs
- DataTablePropertyDescriptor.cs
- DeflateEmulationStream.cs
- AttachmentCollection.cs
- EdmComplexTypeAttribute.cs
- TextBoxBaseDesigner.cs
- WebPartCollection.cs
- WebPermission.cs
- ProfileSection.cs
- XmlSchemaObjectCollection.cs
- _SafeNetHandles.cs
- EntityDataSourceContextCreatedEventArgs.cs
- BehaviorService.cs
- IndependentAnimationStorage.cs
- ArithmeticException.cs
- basevalidator.cs