CompareInfo.Compare Method (String, Int32, Int32, String, Int32, Int32, CompareOptions)
![]() |
---|
The .NET API Reference documentation has a new home. Visit the .NET API Browser on docs.microsoft.com to see the new experience. |
Compares a section of one string with a section of another string using the specified CompareOptions value.
Assembly: mscorlib (in mscorlib.dll)
public virtual int Compare( string string1, int offset1, int length1, string string2, int offset2, int length2, CompareOptions options )
Parameters
- string1
-
Type:
System.String
The first string to compare.
- offset1
-
Type:
System.Int32
The zero-based index of the character in string1 at which to start comparing.
- length1
-
Type:
System.Int32
The number of consecutive characters in string1 to compare.
- string2
-
Type:
System.String
The second string to compare.
- offset2
-
Type:
System.Int32
The zero-based index of the character in string2 at which to start comparing.
- length2
-
Type:
System.Int32
The number of consecutive characters in string2 to compare.
- options
-
Type:
System.Globalization.CompareOptions
A value that defines how string1 and string2 should be compared. options is either the enumeration value Ordinal, or a bitwise combination of one or more of the following values: IgnoreCase, IgnoreSymbols, IgnoreNonSpace, IgnoreWidth, IgnoreKanaType, and StringSort.
Return Value
Type: System.Int32A 32-bit signed integer indicating the lexical relationship between the two comparands.
Value | Condition |
---|---|
zero | The two strings are equal. |
less than zero | The specified section of string1 is less than the specified section of string2. |
greater than zero | The specified section of string1 is greater than the specified section of string2. |
Exception | Condition |
---|---|
ArgumentOutOfRangeException | offset1 or length1 or offset2 or length2 is less than zero. -or- offset1 is greater than or equal to the number of characters in string1. -or- offset2 is greater than or equal to the number of characters in string2. -or- length1 is greater than the number of characters from offset1 to the end of string1. -or- length2 is greater than the number of characters from offset2 to the end of string2. |
ArgumentException | options contains an invalid CompareOptions value. |
If a security decision depends on a string comparison or a case change, you should use the InvariantCulture property to ensure that the behavior is consistent regardless of the culture settings of the operating system.
![]() |
---|
When possible, you should call string comparison methods that have a parameter of type CompareOptions to specify the kind of comparison expected. As a general rule, use linguistic options (using the current culture) for comparing strings displayed in the user interface and specify Ordinal or OrdinalIgnoreCase for security comparisons. |
Notes to Callers:
Character sets include ignorable characters. The Compare(String, Int32, Int32, String, Int32, Int32, CompareOptions) method does not consider these characters when it performs a culture-sensitive comparison. To recognize ignorable characters in your comparison, supply a value of CompareOptions.Ordinal or CompareOptions.OrdinalIgnoreCase for the options parameter.
The following example compares portions of two strings using different CompareOptions settings.
using System; using System.Globalization; public class SamplesCompareInfo { public static void Main() { // Defines the strings to compare. String myStr1 = "My Uncle Bill's clients"; String myStr2 = "My uncle bills clients"; // Creates a CompareInfo that uses the InvariantCulture. CompareInfo myComp = CultureInfo.InvariantCulture.CompareInfo; // Compares two strings using myComp. Console.WriteLine( "Comparing \"{0}\" and \"{1}\"", myStr1.Substring( 3, 10 ), myStr2.Substring( 3, 10 ) ); Console.WriteLine( " With no CompareOptions : {0}", myComp.Compare( myStr1, 3, 10, myStr2, 3, 10 ) ); Console.WriteLine( " With None : {0}", myComp.Compare( myStr1, 3, 10, myStr2, 3, 10, CompareOptions.None ) ); Console.WriteLine( " With Ordinal : {0}", myComp.Compare( myStr1, 3, 10, myStr2, 3, 10, CompareOptions.Ordinal ) ); Console.WriteLine( " With StringSort : {0}", myComp.Compare( myStr1, 3, 10, myStr2, 3, 10, CompareOptions.StringSort ) ); Console.WriteLine( " With IgnoreCase : {0}", myComp.Compare( myStr1, 3, 10, myStr2, 3, 10, CompareOptions.IgnoreCase ) ); Console.WriteLine( " With IgnoreSymbols : {0}", myComp.Compare( myStr1, 3, 10, myStr2, 3, 10, CompareOptions.IgnoreSymbols ) ); Console.WriteLine( " With IgnoreCase and IgnoreSymbols : {0}", myComp.Compare( myStr1, 3, 10, myStr2, 3, 10, CompareOptions.IgnoreCase | CompareOptions.IgnoreSymbols ) ); } } /* This code produces the following output. Comparing "Uncle Bill" and "uncle bill" With no CompareOptions : 1 With None : 1 With Ordinal : -32 With StringSort : 1 With IgnoreCase : 0 With IgnoreSymbols : 1 With IgnoreCase and IgnoreSymbols : 0 */
Available since 8
.NET Framework
Available since 1.1
Portable Class Library
Supported in: portable .NET platforms
Silverlight
Available since 2.0
Windows Phone Silverlight
Available since 7.0
Windows Phone
Available since 8.1