CompareInfo::Compare Method (String^, String^)
Compares two strings.
Assembly: mscorlib (in mscorlib.dll)
Parameters
- string1
-
Type:
System::String^
The first string to compare.
- string2
-
Type:
System::String^
The second string to compare.
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 | string1 is less than string2. |
greater than zero | string1 is greater than string2. |
By default, the comparison is performed by using CompareOptions::None. 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.
Note |
|---|
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, which are characters that are not considered when performing a linguistic or culture-sensitive comparison. The Compare(String^, String^) method does not consider such characters when it performs a culture-sensitive comparison. For instance, a culture-sensitive comparison of "animal" with "ani-mal" (using a soft hyphen, or U+00AD) indicates that the two strings are equivalent, as the following example shows.
Imports System.Globalization Module Example Public Sub Main() Dim ci As CompareInfo = CultureInfo.CurrentCulture.CompareInfo Dim s1 As String = "ani" + ChrW(&h00AD) + "mal" Dim s2 As String = "animal" Console.WriteLine("Comparison of '{0}' and '{1}': {2}", s1, s2, ci.Compare(s1, s2)) End Sub End Module ' The example displays the following output: ' Comparison of 'ani-mal' and 'animal': 0
To recognize ignorable characters in a string comparison, call the Compare(String^, String^, CompareOptions) method and supply a value of either CompareOptions::Ordinal or CompareOptions::OrdinalIgnoreCase for the options parameter.
The following example compares portions of two strings using the different CompareInfo objects:
CompareInfo object associated with the Spanish (Spain) culture with international sort
CompareInfo object associated with the Spanish (Spain) culture with traditional sort
CompareInfo object associated with the InvariantCulture
// The following code example compares two strings using the different CompareInfo instances: // a CompareInfo instance associated with the S"Spanish - Spain" culture with international sort, // a CompareInfo instance associated with the S"Spanish - Spain" culture with traditional sort, and // a CompareInfo instance associated with the InvariantCulture. using namespace System; using namespace System::Globalization; int main() { // Defines the strings to compare. String^ myStr1 = "calle"; String^ myStr2 = "calor"; // Uses GetCompareInfo to create the CompareInfo that // uses the S"es-ES" culture with international sort. CompareInfo^ myCompIntl = CompareInfo::GetCompareInfo( "es-ES" ); // Uses GetCompareInfo to create the CompareInfo that // uses the S"es-ES" culture with traditional sort. CompareInfo^ myCompTrad = CompareInfo::GetCompareInfo( 0x040A ); // Uses the CompareInfo property of the InvariantCulture. CompareInfo^ myCompInva = CultureInfo::InvariantCulture->CompareInfo; // Compares two strings using myCompIntl. Console::WriteLine( "Comparing \"{0}\" and \"{1}\"", myStr1, myStr2 ); Console::WriteLine( " With myCompIntl::Compare: {0}", myCompIntl->Compare( myStr1, myStr2 ) ); Console::WriteLine( " With myCompTrad::Compare: {0}", myCompTrad->Compare( myStr1, myStr2 ) ); Console::WriteLine( " With myCompInva::Compare: {0}", myCompInva->Compare( myStr1, myStr2 ) ); } /* This code produces the following output. Comparing "calle" and "calor" With myCompIntl::Compare: -1 With myCompTrad::Compare: 1 With myCompInva::Compare: -1 */
The following example demonstrates calling the Compare method.
using namespace System; using namespace System::Text; using namespace System::Globalization; int main() { array<String^>^ sign = gcnew array<String^> { "<", "=", ">" }; // The code below demonstrates how strings compare // differently for different cultures. String^ s1 = "Coté"; String^ s2 = "coté"; String^ s3 = "côte"; // Set sort order of strings for French in France. CompareInfo^ ci = (gcnew CultureInfo("fr-FR"))->CompareInfo; Console::WriteLine(L"The LCID for {0} is {1}.", ci->Name, ci->LCID); // Display the result using fr-FR Compare of Coté = coté. Console::WriteLine(L"fr-FR Compare: {0} {2} {1}", s1, s2, sign[ci->Compare(s1, s2, CompareOptions::IgnoreCase) + 1]); // Display the result using fr-FR Compare of coté > côte. Console::WriteLine(L"fr-FR Compare: {0} {2} {1}", s2, s3, sign[ci->Compare(s2, s3, CompareOptions::None) + 1]); // Set sort order of strings for Japanese as spoken in Japan. ci = (gcnew CultureInfo("ja-JP"))->CompareInfo; Console::WriteLine(L"The LCID for {0} is {1}.", ci->Name, ci->LCID); // Display the result using ja-JP Compare of coté < côte. Console::WriteLine("ja-JP Compare: {0} {2} {1}", s2, s3, sign[ci->Compare(s2, s3) + 1]); } // This code produces the following output. // // The LCID for fr-FR is 1036. // fr-FR Compare: Coté = coté // fr-FR Compare: coté > côte // The LCID for ja-JP is 1041. // ja-JP Compare: coté < côte
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
