StringComparer.CurrentCulture 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取一个 StringComparer 对象,该对象使用当前区域性的单词比较规则执行区分大小写的字符串比较。
public:
static property StringComparer ^ CurrentCulture { StringComparer ^ get(); };
public static StringComparer CurrentCulture { get; }
member this.CurrentCulture : StringComparer
Public Shared ReadOnly Property CurrentCulture As StringComparer
属性值
一个新 StringComparer 对象。
示例
下面的代码示例演示了类的属性StringComparer和Create方法。 该示例说明了不同 StringComparer 对象如何对拉丁文字母 I 的三个版本进行排序。
// This example demonstrates members of the
// System::StringComparer class.
using namespace System;
using namespace System::Collections;
using namespace System::Collections::Generic;
using namespace System::Globalization;
using namespace System::Threading;
void Display(List<String^>^ stringList, String^ title)
{
Char firstChar;
int codePoint;
Console::WriteLine(title);
for each (String^ s in stringList)
{
firstChar = s[0];
codePoint = Convert::ToInt32(firstChar);
Console::WriteLine("0x{0:x}", codePoint);
}
Console::WriteLine();
}
int main()
{
// Create a list of string.
List<String^>^ stringList = gcnew List<String^>();
// Get the tr-TR (Turkish-Turkey) culture.
CultureInfo^ turkishCulture = gcnew CultureInfo("tr-TR");
// Get the culture that is associated with the current thread.
CultureInfo^ currentCulture = Thread::CurrentThread->CurrentCulture;
// Get the standard StringComparers.
StringComparer^ invariant = StringComparer::InvariantCulture;
StringComparer^ invariantIgnoreCase =
StringComparer::InvariantCultureIgnoreCase;
StringComparer^ current = StringComparer::CurrentCulture;
StringComparer^ currentIgnoreCase =
StringComparer::CurrentCultureIgnoreCase;
StringComparer^ ordinal = StringComparer::Ordinal;
StringComparer^ ordinalIgnoreCase = StringComparer::OrdinalIgnoreCase;
// Create a StringComparer that uses the Turkish culture and ignores
// case.
StringComparer^ turkishIgnoreCase =
StringComparer::Create(turkishCulture, true);
// Define three strings consisting of different versions of the
// letter I. LATIN CAPITAL LETTER I (U+0049)
String^ capitalLetterI = "I";
// LATIN SMALL LETTER I (U+0069)
String^ smallLetterI = "i";
// LATIN SMALL LETTER DOTLESS I (U+0131)
String^ smallLetterDotlessI = L"\u0131";
// Add the three strings to the list.
stringList->Add(capitalLetterI);
stringList->Add(smallLetterI);
stringList->Add(smallLetterDotlessI);
// Display the original list order.
Display(stringList, "The original order of the list entries...");
// Sort the list using the invariant culture.
stringList->Sort(invariant);
Display(stringList, "Invariant culture...");
stringList->Sort(invariantIgnoreCase);
Display(stringList, "Invariant culture, ignore case...");
// Sort the list using the current culture.
Console::WriteLine("The current culture is \"{0}\".",
currentCulture->Name);
stringList->Sort(current);
Display(stringList, "Current culture...");
stringList->Sort(currentIgnoreCase);
Display(stringList, "Current culture, ignore case...");
// Sort the list using the ordinal value of the character code points.
stringList->Sort(ordinal);
Display(stringList, "Ordinal...");
stringList->Sort(ordinalIgnoreCase);
Display(stringList, "Ordinal, ignore case...");
// Sort the list using the Turkish culture, which treats LATIN SMALL
// LETTER DOTLESS I differently than LATIN SMALL LETTER I.
stringList->Sort(turkishIgnoreCase);
Display(stringList, "Turkish culture, ignore case...");
}
/*
This code example produces the following results:
The original order of the list entries...
0x49
0x69
0x131
Invariant culture...
0x69
0x49
0x131
Invariant culture, ignore case...
0x49
0x69
0x131
The current culture is "en-US".
Current culture...
0x69
0x49
0x131
Current culture, ignore case...
0x49
0x69
0x131
Ordinal...
0x49
0x69
0x131
Ordinal, ignore case...
0x69
0x49
0x131
Turkish culture, ignore case...
0x131
0x49
0x69
*/
// This example demonstrates members of the
// System.StringComparer class.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Threading;
class Sample
{
public static void Main()
{
// Create a list of string.
List<string> list = new List<string>();
// Get the tr-TR (Turkish-Turkey) culture.
CultureInfo turkish = new CultureInfo("tr-TR");
// Get the culture that is associated with the current thread.
CultureInfo thisCulture = Thread.CurrentThread.CurrentCulture;
// Get the standard StringComparers.
StringComparer invCmp = StringComparer.InvariantCulture;
StringComparer invICCmp = StringComparer.InvariantCultureIgnoreCase;
StringComparer currCmp = StringComparer.CurrentCulture;
StringComparer currICCmp = StringComparer.CurrentCultureIgnoreCase;
StringComparer ordCmp = StringComparer.Ordinal;
StringComparer ordICCmp = StringComparer.OrdinalIgnoreCase;
// Create a StringComparer that uses the Turkish culture and ignores case.
StringComparer turkICComp = StringComparer.Create(turkish, true);
// Define three strings consisting of different versions of the letter I.
// LATIN CAPITAL LETTER I (U+0049)
string capitalLetterI = "I";
// LATIN SMALL LETTER I (U+0069)
string smallLetterI = "i";
// LATIN SMALL LETTER DOTLESS I (U+0131)
string smallLetterDotlessI = "\u0131";
// Add the three strings to the list.
list.Add(capitalLetterI);
list.Add(smallLetterI);
list.Add(smallLetterDotlessI);
// Display the original list order.
Display(list, "The original order of the list entries...");
// Sort the list using the invariant culture.
list.Sort(invCmp);
Display(list, "Invariant culture...");
list.Sort(invICCmp);
Display(list, "Invariant culture, ignore case...");
// Sort the list using the current culture.
Console.WriteLine("The current culture is \"{0}\".", thisCulture.Name);
list.Sort(currCmp);
Display(list, "Current culture...");
list.Sort(currICCmp);
Display(list, "Current culture, ignore case...");
// Sort the list using the ordinal value of the character code points.
list.Sort(ordCmp);
Display(list, "Ordinal...");
list.Sort(ordICCmp);
Display(list, "Ordinal, ignore case...");
// Sort the list using the Turkish culture, which treats LATIN SMALL LETTER
// DOTLESS I differently than LATIN SMALL LETTER I.
list.Sort(turkICComp);
Display(list, "Turkish culture, ignore case...");
}
public static void Display(List<string> lst, string title)
{
Char c;
int codePoint;
Console.WriteLine(title);
foreach (string s in lst)
{
c = s[0];
codePoint = Convert.ToInt32(c);
Console.WriteLine("0x{0:x}", codePoint);
}
Console.WriteLine();
}
}
/*
This code example produces the following results:
The original order of the list entries...
0x49
0x69
0x131
Invariant culture...
0x69
0x49
0x131
Invariant culture, ignore case...
0x49
0x69
0x131
The current culture is "en-US".
Current culture...
0x69
0x49
0x131
Current culture, ignore case...
0x49
0x69
0x131
Ordinal...
0x49
0x69
0x131
Ordinal, ignore case...
0x69
0x49
0x131
Turkish culture, ignore case...
0x131
0x49
0x69
*/
// This example demonstrates members of the
// System.StringComparer class.
open System
open System.Globalization
open System.Threading
let display (lst: ResizeArray<string>) title =
printfn $"%s{title}"
for s in lst do
let c = s[0]
let codePoint = Convert.ToInt32 c
printfn $"0x{codePoint:x}"
printfn ""
// Create a list of string.
let list = ResizeArray()
// Get the tr-TR (Turkish-Turkey) culture.
let turkish = CultureInfo "tr-TR"
// Get the culture that is associated with the current thread.
let thisCulture = Thread.CurrentThread.CurrentCulture
// Get the standard StringComparers.
let invCmp = StringComparer.InvariantCulture
let invICCmp = StringComparer.InvariantCultureIgnoreCase
let currCmp = StringComparer.CurrentCulture
let currICCmp = StringComparer.CurrentCultureIgnoreCase
let ordCmp = StringComparer.Ordinal
let ordICCmp = StringComparer.OrdinalIgnoreCase
// Create a StringComparer that uses the Turkish culture and ignores case.
let turkICComp = StringComparer.Create(turkish, true)
// Define three strings consisting of different versions of the letter I.
// LATIN CAPITAL LETTER I (U+0049)
let capitalLetterI = "I"
// LATIN SMALL LETTER I (U+0069)
let smallLetterI = "i"
// LATIN SMALL LETTER DOTLESS I (U+0131)
let smallLetterDotlessI = "\u0131"
// Add the three strings to the list.
list.Add capitalLetterI
list.Add smallLetterI
list.Add smallLetterDotlessI
// Display the original list order.
display list "The original order of the list entries..."
// Sort the list using the invariant culture.
list.Sort invCmp
display list "Invariant culture..."
list.Sort invICCmp
display list "Invariant culture, ignore case..."
// Sort the list using the current culture.
printfn $"The current culture is \"{thisCulture.Name}\"."
list.Sort currCmp
display list "Current culture..."
list.Sort currICCmp
display list "Current culture, ignore case..."
// Sort the list using the ordinal value of the character code points.
list.Sort ordCmp
display list "Ordinal..."
list.Sort ordICCmp
display list "Ordinal, ignore case..."
// Sort the list using the Turkish culture, which treats LATIN SMALL LETTER
// DOTLESS I differently than LATIN SMALL LETTER I.
list.Sort turkICComp
display list "Turkish culture, ignore case..."
(*
This code example produces the following results:
The original order of the list entries...
0x49
0x69
0x131
Invariant culture...
0x69
0x49
0x131
Invariant culture, ignore case...
0x49
0x69
0x131
The current culture is "en-US".
Current culture...
0x69
0x49
0x131
Current culture, ignore case...
0x49
0x69
0x131
Ordinal...
0x49
0x69
0x131
Ordinal, ignore case...
0x69
0x49
0x131
Turkish culture, ignore case...
0x131
0x49
0x69
*)
' This code example demonstrates members of the System.StringComparer class.
Imports System.Collections
Imports System.Collections.Generic
Imports System.Globalization
Imports System.Threading
Class Sample
Public Shared Sub Main()
' Create a list of string.
Dim list As New List(Of String)
' Get the tr-TR (Turkish-Turkey) culture.
Dim turkish As New CultureInfo("tr-TR")
' Get the culture that is associated with the current thread.
Dim thisCulture As CultureInfo = Thread.CurrentThread.CurrentCulture
' Get the standard StringComparers.
Dim invCmp As StringComparer = StringComparer.InvariantCulture
Dim invICCmp As StringComparer = StringComparer.InvariantCultureIgnoreCase
Dim currCmp As StringComparer = StringComparer.CurrentCulture
Dim currICCmp As StringComparer = StringComparer.CurrentCultureIgnoreCase
Dim ordCmp As StringComparer = StringComparer.Ordinal
Dim ordICCmp As StringComparer = StringComparer.OrdinalIgnoreCase
' Create a StringComparer that uses the Turkish culture and ignores case.
Dim turkICComp As StringComparer = StringComparer.Create(turkish, True)
' Define three strings consisting of different versions of the letter I.
' LATIN CAPITAL LETTER I (U+0049)
Dim capitalLetterI As String = "I"
' LATIN SMALL LETTER I (U+0069)
Dim smallLetterI As String = "i"
' LATIN SMALL LETTER DOTLESS I (U+0131)
Dim smallLetterDotlessI As String = "ı"
' Add the three strings to the list.
list.Add(capitalLetterI)
list.Add(smallLetterI)
list.Add(smallLetterDotlessI)
' Display the original list order.
Display(list, "The original order of the list entries...")
' Sort the list using the invariant culture.
list.Sort(invCmp)
Display(list, "Invariant culture...")
list.Sort(invICCmp)
Display(list, "Invariant culture, ignore case...")
' Sort the list using the current culture.
Console.WriteLine("The current culture is ""{0}"".", thisCulture.Name)
list.Sort(currCmp)
Display(list, "Current culture...")
list.Sort(currICCmp)
Display(list, "Current culture, ignore case...")
' Sort the list using the ordinal value of the character code points.
list.Sort(ordCmp)
Display(list, "Ordinal...")
list.Sort(ordICCmp)
Display(list, "Ordinal, ignore case...")
' Sort the list using the Turkish culture, which treats LATIN SMALL LETTER
' DOTLESS I differently than LATIN SMALL LETTER I.
list.Sort(turkICComp)
Display(list, "Turkish culture, ignore case...")
End Sub
Public Shared Sub Display(ByVal lst As List(Of String), ByVal title As String)
Dim c As Char
Dim s As String
Dim codePoint As Integer
Console.WriteLine(title)
For Each s In lst
c = s(0)
codePoint = Convert.ToInt32(c)
Console.WriteLine("0x{0:x}", codePoint)
Next s
Console.WriteLine()
End Sub
End Class
'This code example produces the following results:
'
'The original order of the list entries...
'0x49
'0x69
'0x131
'
'Invariant culture...
'0x69
'0x49
'0x131
'
'Invariant culture, ignore case...
'0x49
'0x69
'0x131
'
'The current culture is "en-US".
'Current culture...
'0x69
'0x49
'0x131
'
'Current culture, ignore case...
'0x49
'0x69
'0x131
'
'Ordinal...
'0x49
'0x69
'0x131
'
'Ordinal, ignore case...
'0x69
'0x49
'0x131
'
'Turkish culture, ignore case...
'0x131
'0x49
'0x69
'
注解
StringComparer当字符串在语言上相关时,可以使用属性返回CurrentCulture的函数。 例如,如果向用户显示字符串,或者字符串是用户交互的结果,则应使用区分区域性的字符串比较来排序字符串数据。
当前区域性是 CultureInfo 与当前线程关联的对象。
该 CurrentCulture 属性实际上返回从该类派生的匿名类的 StringComparer 实例。
对属性get
访问器的每次调用CurrentCulture都会返回一个新StringComparer对象,如以下代码所示。
private void CompareCurrentCultureStringComparer()
{
StringComparer stringComparer1 = StringComparer.CurrentCulture;
StringComparer stringComparer2 = StringComparer.CurrentCulture;
// Displays false
Console.WriteLine(StringComparer.ReferenceEquals(stringComparer1,
stringComparer2));
}
let compareCurrentCultureStringComparer () =
let stringComparer1 = StringComparer.CurrentCulture
let stringComparer2 = StringComparer.CurrentCulture
// Displays false
printfn $"{StringComparer.ReferenceEquals(stringComparer1, stringComparer2)}"
Private Sub CompareCurrentCultureStringComparers()
Dim stringComparer1 As StringComparer = StringComparer.CurrentCulture
Dim stringComparer2 As StringComparer = StringComparer.CurrentCulture
' Displays False
Console.WriteLine(StringComparer.ReferenceEquals(stringComparer1, _
stringComparer2))
End Sub
为了提高性能,可以将对象存储在 StringComparer 局部变量中,而不是多次检索属性的值 CurrentCulture 。