Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / clr / src / BCL / System / StringComparer.cs / 1 / StringComparer.cs
namespace System { using System.Collections; using System.Collections.Generic; using System.Globalization; [Serializable] [System.Runtime.InteropServices.ComVisible(true)] public abstract class StringComparer : IComparer, IEqualityComparer, IComparer, IEqualityComparer { private static StringComparer _invariantCulture = new CultureAwareComparer(CultureInfo.InvariantCulture, false); private static StringComparer _invariantCultureIgnoreCase = new CultureAwareComparer(CultureInfo.InvariantCulture, true); private static StringComparer _ordinal = new OrdinalComparer(false); private static StringComparer _ordinalIgnoreCase = new OrdinalComparer(true); public static StringComparer InvariantCulture { get { return _invariantCulture; } } public static StringComparer InvariantCultureIgnoreCase { get { return _invariantCultureIgnoreCase; } } public static StringComparer CurrentCulture { get { return new CultureAwareComparer(CultureInfo.CurrentCulture, false); } } public static StringComparer CurrentCultureIgnoreCase { get { return new CultureAwareComparer(CultureInfo.CurrentCulture, true); } } public static StringComparer Ordinal { get { return _ordinal; } } public static StringComparer OrdinalIgnoreCase { get { return _ordinalIgnoreCase; } } public static StringComparer Create(CultureInfo culture, bool ignoreCase) { if( culture == null) { throw new ArgumentNullException("culture"); } 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"); } 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"); } 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 TextInfo.CompareOrdinalIgnoreCase(x, y); } 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 (TextInfo.CompareOrdinalIgnoreCase(x, y) == 0); } return x.Equals(y); } public override int GetHashCode(string obj) { if( obj == null) { throw new ArgumentNullException("obj"); } 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; [Serializable] [System.Runtime.InteropServices.ComVisible(true)] public abstract class StringComparer : IComparer, IEqualityComparer, IComparer , IEqualityComparer { private static StringComparer _invariantCulture = new CultureAwareComparer(CultureInfo.InvariantCulture, false); private static StringComparer _invariantCultureIgnoreCase = new CultureAwareComparer(CultureInfo.InvariantCulture, true); private static StringComparer _ordinal = new OrdinalComparer(false); private static StringComparer _ordinalIgnoreCase = new OrdinalComparer(true); public static StringComparer InvariantCulture { get { return _invariantCulture; } } public static StringComparer InvariantCultureIgnoreCase { get { return _invariantCultureIgnoreCase; } } public static StringComparer CurrentCulture { get { return new CultureAwareComparer(CultureInfo.CurrentCulture, false); } } public static StringComparer CurrentCultureIgnoreCase { get { return new CultureAwareComparer(CultureInfo.CurrentCulture, true); } } public static StringComparer Ordinal { get { return _ordinal; } } public static StringComparer OrdinalIgnoreCase { get { return _ordinalIgnoreCase; } } public static StringComparer Create(CultureInfo culture, bool ignoreCase) { if( culture == null) { throw new ArgumentNullException("culture"); } 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"); } 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"); } 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 TextInfo.CompareOrdinalIgnoreCase(x, y); } 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 (TextInfo.CompareOrdinalIgnoreCase(x, y) == 0); } return x.Equals(y); } public override int GetHashCode(string obj) { if( obj == null) { throw new ArgumentNullException("obj"); } 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DetailsViewCommandEventArgs.cs
- Switch.cs
- EncoderParameters.cs
- KeySplineConverter.cs
- _PooledStream.cs
- ExtenderProviderService.cs
- HtmlContainerControl.cs
- ReferencedCategoriesDocument.cs
- FaultException.cs
- KerberosRequestorSecurityToken.cs
- PropertyValueChangedEvent.cs
- _DisconnectOverlappedAsyncResult.cs
- HostingMessageProperty.cs
- graph.cs
- AttributeQuery.cs
- Int32AnimationUsingKeyFrames.cs
- XslException.cs
- OdbcErrorCollection.cs
- TextSegment.cs
- PrinterSettings.cs
- AppliedDeviceFiltersEditor.cs
- Popup.cs
- WinFormsSpinner.cs
- WindowsToolbar.cs
- BamlLocalizableResource.cs
- SimpleType.cs
- Timer.cs
- SqlClientWrapperSmiStreamChars.cs
- ServiceModelTimeSpanValidator.cs
- SmtpLoginAuthenticationModule.cs
- ViewStateModeByIdAttribute.cs
- ZipIOCentralDirectoryBlock.cs
- ExpressionPrefixAttribute.cs
- UidManager.cs
- FileInfo.cs
- WmpBitmapDecoder.cs
- connectionpool.cs
- CollectionConverter.cs
- FileUtil.cs
- IriParsingElement.cs
- GridToolTip.cs
- PageBuildProvider.cs
- XpsImageSerializationService.cs
- ZipIOLocalFileHeader.cs
- HttpSessionStateBase.cs
- designeractionbehavior.cs
- ProcessingInstructionAction.cs
- SqlVersion.cs
- CodeDomSerializer.cs
- StateMachineSubscriptionManager.cs
- PowerEase.cs
- InternalPermissions.cs
- ArrayTypeMismatchException.cs
- Avt.cs
- TableParaClient.cs
- FigureParaClient.cs
- LinqDataSourceStatusEventArgs.cs
- TemplateBindingExpression.cs
- NameTable.cs
- ThreadStaticAttribute.cs
- FontFamilyValueSerializer.cs
- Win32KeyboardDevice.cs
- QilInvokeLateBound.cs
- SaveFileDialog.cs
- InternalConfigEventArgs.cs
- TimeSpanMinutesConverter.cs
- UrlMapping.cs
- RSAProtectedConfigurationProvider.cs
- EncodingNLS.cs
- TimeEnumHelper.cs
- StringUtil.cs
- ToolStripPanelCell.cs
- SmtpCommands.cs
- ControlDesignerState.cs
- ActiveDocumentEvent.cs
- SmtpFailedRecipientsException.cs
- FtpRequestCacheValidator.cs
- StylusPointCollection.cs
- MissingManifestResourceException.cs
- KeyConstraint.cs
- ResolvedKeyFrameEntry.cs
- RootAction.cs
- MoveSizeWinEventHandler.cs
- PrivilegedConfigurationManager.cs
- FileInfo.cs
- XmlDataLoader.cs
- CommentAction.cs
- UriSectionReader.cs
- TextRangeAdaptor.cs
- TrackingMemoryStream.cs
- SupportsEventValidationAttribute.cs
- WrappingXamlSchemaContext.cs
- DataGridViewLayoutData.cs
- Size.cs
- ReadOnlyNameValueCollection.cs
- EntityCommandCompilationException.cs
- CryptoProvider.cs
- SqlDataAdapter.cs
- AssertFilter.cs
- XmlTextEncoder.cs