public value class char : IComparable, IComparable<char>, IConvertible, IEquatable<char>
public value class char : IComparable, IComparable<char>, IConvertible, IEquatable<char>, ISpanFormattable
public value class char : IComparable<char>, IConvertible, IEquatable<char>, IParsable<char>, ISpanParsable<char>, System::Numerics::IAdditionOperators<char, char, char>, System::Numerics::IAdditiveIdentity<char, char>, System::Numerics::IBinaryInteger<char>, System::Numerics::IBinaryNumber<char>, System::Numerics::IBitwiseOperators<char, char, char>, System::Numerics::IComparisonOperators<char, char, bool>, System::Numerics::IDecrementOperators<char>, System::Numerics::IDivisionOperators<char, char, char>, System::Numerics::IEqualityOperators<char, char, bool>, System::Numerics::IIncrementOperators<char>, System::Numerics::IMinMaxValue<char>, System::Numerics::IModulusOperators<char, char, char>, System::Numerics::IMultiplicativeIdentity<char, char>, System::Numerics::IMultiplyOperators<char, char, char>, System::Numerics::INumber<char>, System::Numerics::INumberBase<char>, System::Numerics::IShiftOperators<char, int, char>, System::Numerics::ISubtractionOperators<char, char, char>, System::Numerics::IUnaryNegationOperators<char, char>, System::Numerics::IUnaryPlusOperators<char, char>, System::Numerics::IUnsignedNumber<char>
public value class char : IComparable, IConvertible
public value class char : IComparable, IComparable<char>, IEquatable<char>
public struct Char : IComparable, IComparable<char>, IConvertible, IEquatable<char>
public readonly struct Char : IComparable, IComparable<char>, IConvertible, IEquatable<char>
public readonly struct Char : IComparable, IComparable<char>, IConvertible, IEquatable<char>, ISpanFormattable
public readonly struct Char : IComparable<char>, IConvertible, IEquatable<char>, IParsable<char>, ISpanParsable<char>, System.Numerics.IAdditionOperators<char,char,char>, System.Numerics.IAdditiveIdentity<char,char>, System.Numerics.IBinaryInteger<char>, System.Numerics.IBinaryNumber<char>, System.Numerics.IBitwiseOperators<char,char,char>, System.Numerics.IComparisonOperators<char,char,bool>, System.Numerics.IDecrementOperators<char>, System.Numerics.IDivisionOperators<char,char,char>, System.Numerics.IEqualityOperators<char,char,bool>, System.Numerics.IIncrementOperators<char>, System.Numerics.IMinMaxValue<char>, System.Numerics.IModulusOperators<char,char,char>, System.Numerics.IMultiplicativeIdentity<char,char>, System.Numerics.IMultiplyOperators<char,char,char>, System.Numerics.INumber<char>, System.Numerics.INumberBase<char>, System.Numerics.IShiftOperators<char,int,char>, System.Numerics.ISubtractionOperators<char,char,char>, System.Numerics.IUnaryNegationOperators<char,char>, System.Numerics.IUnaryPlusOperators<char,char>, System.Numerics.IUnsignedNumber<char>
[System.Serializable]
public struct Char : IComparable, IConvertible
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public struct Char : IComparable, IComparable<char>, IConvertible, IEquatable<char>
public struct Char : IComparable, IComparable<char>, IEquatable<char>
type char = struct
    interface IConvertible
type char = struct
    interface IConvertible
    interface ISpanFormattable
    interface IFormattable
type char = struct
    interface IConvertible
    interface IFormattable
    interface IParsable<char>
    interface ISpanFormattable
    interface ISpanParsable<char>
    interface IAdditionOperators<char, char, char>
    interface IAdditiveIdentity<char, char>
    interface IBinaryInteger<char>
    interface IBinaryNumber<char>
    interface IBitwiseOperators<char, char, char>
    interface IComparisonOperators<char, char, bool>
    interface IEqualityOperators<char, char, bool>
    interface IDecrementOperators<char>
    interface IDivisionOperators<char, char, char>
    interface IIncrementOperators<char>
    interface IModulusOperators<char, char, char>
    interface IMultiplicativeIdentity<char, char>
    interface IMultiplyOperators<char, char, char>
    interface INumber<char>
    interface INumberBase<char>
    interface ISubtractionOperators<char, char, char>
    interface IUnaryNegationOperators<char, char>
    interface IUnaryPlusOperators<char, char>
    interface IShiftOperators<char, int, char>
    interface IMinMaxValue<char>
    interface IUnsignedNumber<char>
[<System.Serializable>]
type char = struct
    interface IConvertible
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type char = struct
    interface IConvertible
type char = struct
Public Structure Char
Implements IComparable, IComparable(Of Char), IConvertible, IEquatable(Of Char)
Public Structure Char
Implements IComparable, IComparable(Of Char), IConvertible, IEquatable(Of Char), ISpanFormattable
Public Structure Char
Implements IAdditionOperators(Of Char, Char, Char), IAdditiveIdentity(Of Char, Char), IBinaryInteger(Of Char), IBinaryNumber(Of Char), IBitwiseOperators(Of Char, Char, Char), IComparable(Of Char), IComparisonOperators(Of Char, Char, Boolean), IConvertible, IDecrementOperators(Of Char), IDivisionOperators(Of Char, Char, Char), IEqualityOperators(Of Char, Char, Boolean), IEquatable(Of Char), IIncrementOperators(Of Char), IMinMaxValue(Of Char), IModulusOperators(Of Char, Char, Char), IMultiplicativeIdentity(Of Char, Char), IMultiplyOperators(Of Char, Char, Char), INumber(Of Char), INumberBase(Of Char), IParsable(Of Char), IShiftOperators(Of Char, Integer, Char), ISpanParsable(Of Char), ISubtractionOperators(Of Char, Char, Char), IUnaryNegationOperators(Of Char, Char), IUnaryPlusOperators(Of Char, Char), IUnsignedNumber(Of Char)
Public Structure Char
Implements IComparable, IConvertible
Public Structure Char
Implements IComparable, IComparable(Of Char), IEquatable(Of Char)
Object
char ch1 = '1'; String^ str = "test string"; Console::WriteLine( chA.CompareTo( 'B' ) ); // Output: "-1" (meaning 'A' is 1 less than 'B') Console::WriteLine( chA.Equals( 'A' ) ); // Output: "True" Console::WriteLine( Char::GetNumericValue( ch1 ) ); // Output: "1" Console::WriteLine( Char::IsControl( '\t' ) ); // Output: "True" Console::WriteLine( Char::IsDigit( ch1 ) ); // Output: "True" Console::WriteLine( Char::IsLetter( ',' ) ); // Output: "False" Console::WriteLine( Char::IsLower( 'u' ) ); // Output: "True" Console::WriteLine( Char::IsNumber( ch1 ) ); // Output: "True" Console::WriteLine( Char::IsPunctuation( '.' ) ); // Output: "True" Console::WriteLine( Char::IsSeparator( str, 4 ) ); // Output: "True" Console::WriteLine( Char::IsSymbol( '+' ) ); // Output: "True" Console::WriteLine( Char::IsWhiteSpace( str, 4 ) ); // Output: "True" Console::WriteLine( Char::Parse( "S" ) ); // Output: "S" Console::WriteLine( Char::ToLower( 'M' ) ); // Output: "m" Console::WriteLine( 'x' ); // Output: "x" using System; public class CharStructureSample public static void Main() char chA = 'A'; char ch1 = '1'; string str = "test string"; Console.WriteLine(chA.CompareTo('B')); //----------- Output: "-1" (meaning 'A' is 1 less than 'B') Console.WriteLine(chA.Equals('A')); //----------- Output: "True" Console.WriteLine(Char.GetNumericValue(ch1)); //----------- Output: "1" Console.WriteLine(Char.IsControl('\t')); //----------- Output: "True" Console.WriteLine(Char.IsDigit(ch1)); //----------- Output: "True" Console.WriteLine(Char.IsLetter(',')); //----------- Output: "False" Console.WriteLine(Char.IsLower('u')); //----------- Output: "True" Console.WriteLine(Char.IsNumber(ch1)); //----------- Output: "True" Console.WriteLine(Char.IsPunctuation('.')); //----------- Output: "True" Console.WriteLine(Char.IsSeparator(str, 4)); //----------- Output: "True" Console.WriteLine(Char.IsSymbol('+')); //----------- Output: "True" Console.WriteLine(Char.IsWhiteSpace(str, 4)); //----------- Output: "True" Console.WriteLine(Char.Parse("S")); //----------- Output: "S" Console.WriteLine(Char.ToLower('M')); //----------- Output: "m" Console.WriteLine('x'.ToString()); //----------- Output: "x" open System let chA = 'A' let ch1 = '1' let str = "test string" printfn $"{chA.CompareTo 'B'}" //----------- Output: "-1" (meaning 'A' is 1 less than 'B') printfn $"{chA.Equals 'A'}" //----------- Output: "True" printfn $"{Char.GetNumericValue ch1}" //----------- Output: "1" printfn $"{Char.IsControl '\t'}" //----------- Output: "True" printfn $"{Char.IsDigit ch1}" //----------- Output: "True" printfn $"{Char.IsLetter ','}" //----------- Output: "False" printfn $"{Char.IsLower 'u'}" //----------- Output: "True" printfn $"{Char.IsNumber ch1}" //----------- Output: "True" printfn $"{Char.IsPunctuation '.'}" //----------- Output: "True" printfn $"{Char.IsSeparator(str, 4)}" //----------- Output: "True" printfn $"{Char.IsSymbol '+'}" //----------- Output: "True" printfn $"{Char.IsWhiteSpace(str, 4)}" //----------- Output: "True" printfn $"""{Char.Parse "S"}""" //----------- Output: "S" printfn $"{Char.ToLower 'M'}" //----------- Output: "m" printfn $"{'x'}" //----------- Output: "x" Module CharStructure Public Sub Main() Dim chA As Char chA = "A"c Dim ch1 As Char ch1 = "1"c Dim str As String str = "test string" Console.WriteLine(chA.CompareTo("B"c)) ' Output: "-1" (meaning 'A' is 1 less than 'B') Console.WriteLine(chA.Equals("A"c)) ' Output: "True" Console.WriteLine(Char.GetNumericValue(ch1)) ' Output: "1" Console.WriteLine(Char.IsControl(Chr(9))) ' Output: "True" Console.WriteLine(Char.IsDigit(ch1)) ' Output: "True" Console.WriteLine(Char.IsLetter(","c)) ' Output: "False" Console.WriteLine(Char.IsLower("u"c)) ' Output: "True" Console.WriteLine(Char.IsNumber(ch1)) ' Output: "True" Console.WriteLine(Char.IsPunctuation("."c)) ' Output: "True" Console.WriteLine(Char.IsSeparator(str, 4)) ' Output: "True" Console.WriteLine(Char.IsSymbol("+"c)) ' Output: "True" Console.WriteLine(Char.IsWhiteSpace(str, 4)) ' Output: "True" Console.WriteLine(Char.Parse("S")) ' Output: "S" Console.WriteLine(Char.ToLower("M"c)) ' Output: "m" Console.WriteLine("x"c.ToString()) ' Output: "x" End Sub End Module

.NET 會 Char 使用 結構,使用 UTF-16 編碼來表示 Unicode 字碼點。 物件的值為 Char 它的 16 位數值 (序數) 值。

如果您不熟悉 Unicode、純量值、字碼點、代理字組、UTF-16 和 Rune 類型,請參閱 .NET 中的字元編碼簡介

下列各節會檢查 物件與字元之間的 Char 關聯性,並討論使用 Char 實例執行的一些常見工作。 建議您考慮在 Rune .NET Core 3.0 中引進的類型,作為執行其中一些工作的替代方案 Char

  • Char 物件、Unicode 字元和字串
  • 字元和字元類別
  • 字元和文字元素
  • Char 值和 Interop
  • Char 物件、Unicode 字元和字串

    String 物件是結構的循序集合 Char ,代表文字字串。 大部分 Unicode 字元都可以由單 Char 一物件表示,但編碼為基底字元、Surrogate 字組和/或結合字元序列的字元是由多個 Char 物件表示。 因此, Char 物件中的 String 結構不一定等於單一 Unicode 字元。

    在下列情況下,會使用多個 16 位程式碼單位來代表單一 Unicode 字元:

  • 字元,其可能包含單一字元或基底字元,後面接著一或多個結合字元。 例如,字元 ä 是由 Char 程式碼單位為 U+0061,後面接著 Char 程式碼單位為 U+0308 的物件來表示。 (字元 ä 也可以由具有 U+00E4.) 程式碼單位的單 Char 一物件定義。下列範例說明字元 ä 是由兩 Char 個 物件所組成。

    using System; using System.IO; public class Example public static void Main() StreamWriter sw = new StreamWriter("chars1.txt"); char[] chars = { '\u0061', '\u0308' }; string strng = new String(chars); sw.WriteLine(strng); sw.Close(); // The example produces the following output: // ä open System open System.IO let sw = new StreamWriter("chars1.txt") let chars = [| '\u0061'; '\u0308' |] let string = String chars sw.WriteLine string sw.Close() // The example produces the following output: // ä Imports System.IO Module Example Public Sub Main() Dim sw As New StreamWriter("chars1.txt") Dim chars() As Char = { ChrW(&h0061), ChrW(&h0308) } Dim strng As New String(chars) sw.WriteLine(strng) sw.Close() End Sub End Module ' The example produces the following output: ' ä
  • Unicode 基本多語平面以外的字元 (BMP) 。 除了代表平面 0 的 BMP 之外,Unicode 還支援十六個平面。 Unicode 字碼指標是以 UTF-32 表示的 21 位值,其中包含平面。 例如,U+1D160 代表[符號第八個記事] 字元。 因為 UTF-16 編碼只有 16 位,所以 BMP 以外的字元會以 UTF-16 中的 Surrogate 字組表示。 下列範例說明 UTF-32 相當於 U+1D160 的 U+1D160 是 U+D834 U+DD60。 U+D834 是高 Surrogate;高代理範圍從 U+D800 到 U+DBFF。 U+DD60 是低 Surrogate;低代理範圍從 U+DC00 到 U+DFFF。

    using System; using System.IO; public class Example public static void Main() StreamWriter sw = new StreamWriter(@".\chars2.txt"); int utf32 = 0x1D160; string surrogate = Char.ConvertFromUtf32(utf32); sw.WriteLine("U+{0:X6} UTF-32 = {1} ({2}) UTF-16", utf32, surrogate, ShowCodePoints(surrogate)); sw.Close(); private static string ShowCodePoints(string value) string retval = null; foreach (var ch in value) retval += String.Format("U+{0:X4} ", Convert.ToUInt16(ch)); return retval.Trim(); // The example produces the following output: // U+01D160 UTF-32 = ð (U+D834 U+DD60) UTF-16 open System open System.IO let showCodePoints (value: char seq) = let str = value |> Seq.map (fun ch -> $"U+{Convert.ToUInt16 ch:X4}") |> String.concat "" str.Trim() let sw = new StreamWriter(@".\chars2.txt") let utf32 = 0x1D160 let surrogate = Char.ConvertFromUtf32 utf32 sw.WriteLine $"U+{utf32:X6} UTF-32 = {surrogate} ({showCodePoints surrogate}) UTF-16" sw.Close() // The example produces the following output: // U+01D160 UTF-32 = ð (U+D834 U+DD60) UTF-16 Imports System.IO Module Example Public Sub Main() Dim sw As New StreamWriter(".\chars2.txt") Dim utf32 As Integer = &h1D160 Dim surrogate As String = Char.ConvertFromUtf32(utf32) sw.WriteLine("U+{0:X6} UTF-32 = {1} ({2}) UTF-16", utf32, surrogate, ShowCodePoints(surrogate)) sw.Close() End Sub Private Function ShowCodePoints(value As String) As String Dim retval As String = Nothing For Each ch In value retval += String.Format("U+{0:X4} ", Convert.ToUInt16(ch)) Return retval.Trim() End Function End Module ' The example produces the following output: ' U+01D160 UTF-32 = ð (U+D834 U+DD60) UTF-16

    字元和字元類別

    每個 Unicode 字元或有效的 Surrogate 字組都屬於 Unicode 類別。 在 .NET 中,Unicode 類別是由列舉的成員表示, UnicodeCategory 並包含例如 、 UnicodeCategory.LowercaseLetter UnicodeCategory.SpaceSeparator UnicodeCategory.CurrencySymbol 值。

    若要判斷字元的 Unicode 類別,請呼叫 GetUnicodeCategory 方法。 例如,下列範例會呼叫 來 GetUnicodeCategory 顯示字串中每個字元的 Unicode 類別。 只有在 實例中 String 沒有 Surrogate 配對時,此範例才能正確運作。

    using System; using System.Globalization; class Example public static void Main() // Define a string with a variety of character categories. String s = "The red car drove down the long, narrow, secluded road."; // Determine the category of each character. foreach (var ch in s) Console.WriteLine("'{0}': {1}", ch, Char.GetUnicodeCategory(ch)); // The example displays the following output: // 'T': UppercaseLetter // 'h': LowercaseLetter // 'e': LowercaseLetter // ' ': SpaceSeparator // 'r': LowercaseLetter // 'e': LowercaseLetter // 'd': LowercaseLetter // ' ': SpaceSeparator // 'c': LowercaseLetter // 'a': LowercaseLetter // 'r': LowercaseLetter // ' ': SpaceSeparator // 'd': LowercaseLetter // 'r': LowercaseLetter // 'o': LowercaseLetter // 'v': LowercaseLetter // 'e': LowercaseLetter // ' ': SpaceSeparator // 'd': LowercaseLetter // 'o': LowercaseLetter // 'w': LowercaseLetter // 'n': LowercaseLetter // ' ': SpaceSeparator // 't': LowercaseLetter // 'h': LowercaseLetter // 'e': LowercaseLetter // ' ': SpaceSeparator // 'l': LowercaseLetter // 'o': LowercaseLetter // 'n': LowercaseLetter // 'g': LowercaseLetter // ',': OtherPunctuation // ' ': SpaceSeparator // 'n': LowercaseLetter // 'a': LowercaseLetter // 'r': LowercaseLetter // 'r': LowercaseLetter // 'o': LowercaseLetter // 'w': LowercaseLetter // ',': OtherPunctuation // ' ': SpaceSeparator // 's': LowercaseLetter // 'e': LowercaseLetter // 'c': LowercaseLetter // 'l': LowercaseLetter // 'u': LowercaseLetter // 'd': LowercaseLetter // 'e': LowercaseLetter // 'd': LowercaseLetter // ' ': SpaceSeparator // 'r': LowercaseLetter // 'o': LowercaseLetter // 'a': LowercaseLetter // 'd': LowercaseLetter // '.': OtherPunctuation open System // Define a string with a variety of character categories. let s = "The red car drove down the long, narrow, secluded road." // Determine the category of each character. for ch in s do printfn $"'{ch}': {Char.GetUnicodeCategory ch}" // The example displays the following output: // 'T': UppercaseLetter // 'h': LowercaseLetter // 'e': LowercaseLetter // ' ': SpaceSeparator // 'r': LowercaseLetter // 'e': LowercaseLetter // 'd': LowercaseLetter // ' ': SpaceSeparator // 'c': LowercaseLetter // 'a': LowercaseLetter // 'r': LowercaseLetter // ' ': SpaceSeparator // 'd': LowercaseLetter // 'r': LowercaseLetter // 'o': LowercaseLetter // 'v': LowercaseLetter // 'e': LowercaseLetter // ' ': SpaceSeparator // 'd': LowercaseLetter // 'o': LowercaseLetter // 'w': LowercaseLetter // 'n': LowercaseLetter // ' ': SpaceSeparator // 't': LowercaseLetter // 'h': LowercaseLetter // 'e': LowercaseLetter // ' ': SpaceSeparator // 'l': LowercaseLetter // 'o': LowercaseLetter // 'n': LowercaseLetter // 'g': LowercaseLetter // ',': OtherPunctuation // ' ': SpaceSeparator // 'n': LowercaseLetter // 'a': LowercaseLetter // 'r': LowercaseLetter // 'r': LowercaseLetter // 'o': LowercaseLetter // 'w': LowercaseLetter // ',': OtherPunctuation // ' ': SpaceSeparator // 's': LowercaseLetter // 'e': LowercaseLetter // 'c': LowercaseLetter // 'l': LowercaseLetter // 'u': LowercaseLetter // 'd': LowercaseLetter // 'e': LowercaseLetter // 'd': LowercaseLetter // ' ': SpaceSeparator // 'r': LowercaseLetter // 'o': LowercaseLetter // 'a': LowercaseLetter // 'd': LowercaseLetter // '.': OtherPunctuation Imports System.Globalization Module Example Public Sub Main() ' Define a string with a variety of character categories. Dim s As String = "The car drove down the narrow, secluded road." ' Determine the category of each character. For Each ch In s Console.WriteLine("'{0}': {1}", ch, Char.GetUnicodeCategory(ch)) End Sub End Module ' The example displays the following output: ' 'T': UppercaseLetter ' 'h': LowercaseLetter ' 'e': LowercaseLetter ' ' ': SpaceSeparator ' 'r': LowercaseLetter ' 'e': LowercaseLetter ' 'd': LowercaseLetter ' ' ': SpaceSeparator ' 'c': LowercaseLetter ' 'a': LowercaseLetter ' 'r': LowercaseLetter ' ' ': SpaceSeparator ' 'd': LowercaseLetter ' 'r': LowercaseLetter ' 'o': LowercaseLetter ' 'v': LowercaseLetter ' 'e': LowercaseLetter ' ' ': SpaceSeparator ' 'd': LowercaseLetter ' 'o': LowercaseLetter ' 'w': LowercaseLetter ' 'n': LowercaseLetter ' ' ': SpaceSeparator ' 't': LowercaseLetter ' 'h': LowercaseLetter ' 'e': LowercaseLetter ' ' ': SpaceSeparator ' 'l': LowercaseLetter ' 'o': LowercaseLetter ' 'n': LowercaseLetter ' 'g': LowercaseLetter ' ',': OtherPunctuation ' ' ': SpaceSeparator ' 'n': LowercaseLetter ' 'a': LowercaseLetter ' 'r': LowercaseLetter ' 'r': LowercaseLetter ' 'o': LowercaseLetter ' 'w': LowercaseLetter ' ',': OtherPunctuation ' ' ': SpaceSeparator ' 's': LowercaseLetter ' 'e': LowercaseLetter ' 'c': LowercaseLetter ' 'l': LowercaseLetter ' 'u': LowercaseLetter ' 'd': LowercaseLetter ' 'e': LowercaseLetter ' 'd': LowercaseLetter ' ' ': SpaceSeparator ' 'r': LowercaseLetter ' 'o': LowercaseLetter ' 'a': LowercaseLetter ' 'd': LowercaseLetter ' '.': OtherPunctuation

    就內部而言,對於 ASCII 範圍以外的字元, (U+0000 到 U+00FF) , GetUnicodeCategory 此方法取決於 類別所 CharUnicodeInfo 報告的 Unicode 類別。 從 .NET Framework 4.6.2 開始,Unicode 字元會根據 Unicode Standard 8.0.0 版 進行分類。 在從 .NET Framework 4 到 .NET Framework 4.6.1 .NET Framework 版本中,會根據 Unicode Standard 6.3.0 版分類。

    字元和文字元素

    因為單一字元可以由多個 Char 物件表示,所以使用個別 Char 物件並不一定有意義。 例如,下列範例會將代表[內嵌數位零到 9] 的 Unicode 字碼指標轉換為 UTF-16 編碼的程式碼單位。 因為其錯誤地將物件與字元相等 Char ,所以它不正確地報告產生的字串有 20 個字元。

    using System; public class Example public static void Main() string result = String.Empty; for (int ctr = 0x10107; ctr <= 0x10110; ctr++) // Range of Aegean numbers. result += Char.ConvertFromUtf32(ctr); Console.WriteLine("The string contains {0} characters.", result.Length); // The example displays the following output: // The string contains 20 characters. open System let result = [ for i in 0x10107..0x10110 do // Range of Aegean numbers. Char.ConvertFromUtf32 i ] |> String.concat "" printfn $"The string contains {result.Length} characters." // The example displays the following output: // The string contains 20 characters. Module Example Public Sub Main() Dim result As String = String.Empty For ctr As Integer = &h10107 To &h10110 ' Range of Aegean numbers. result += Char.ConvertFromUtf32(ctr) Console.WriteLine("The string contains {0} characters.", result.Length) End Sub End Module ' The example displays the following output: ' The string contains 20 characters.

    您可以執行下列動作,以避免假設 Char 物件代表單一字元:

  • 您可以完全使用 String 物件,而不是使用其個別字元來表示和分析語言內容。

  • 您可以使用 String.EnumerateRunes ,如下列範例所示:

    int CountLetters(string s) int letterCount = 0; foreach (Rune rune in s.EnumerateRunes()) if (Rune.IsLetter(rune)) { letterCount++; } return letterCount; let countLetters (s: string) = let mutable letterCount = 0 for rune in s.EnumerateRunes() do if Rune.IsLetter rune then letterCount <- letterCount + 1 letterCount
  • 您可以使用 類別 StringInfo 來處理文字元素,而不是個別 Char 物件。 下列範例會 StringInfo 使用 物件來計算字串中的文字元素數目,此字串包含零到 9 個數字。 因為它會將 Surrogate 配對視為單一字元,所以它會正確報告字串包含十個字元。

    using System; using System.Globalization; public class Example public static void Main() string result = String.Empty; for (int ctr = 0x10107; ctr <= 0x10110; ctr++) // Range of Aegean numbers. result += Char.ConvertFromUtf32(ctr); StringInfo si = new StringInfo(result); Console.WriteLine("The string contains {0} characters.", si.LengthInTextElements); // The example displays the following output: // The string contains 10 characters. open System open System.Globalization let result = [ for i in 0x10107..0x10110 do // Range of Aegean numbers. Char.ConvertFromUtf32 i ] |> String.concat "" let si = StringInfo result printfn $"The string contains {si.LengthInTextElements} characters." // The example displays the following output: // The string contains 10 characters. Imports System.Globalization Module Example Public Sub Main() Dim result As String = String.Empty For ctr As Integer = &h10107 To &h10110 ' Range of Aegean numbers. result += Char.ConvertFromUtf32(ctr) Dim si As New StringInfo(result) Console.WriteLine("The string contains {0} characters.", si.LengthInTextElements) End Sub End Module ' The example displays the following output: ' The string contains 10 characters.
  • 如果字串包含具有一或多個組合字元的基底字元,您可以呼叫 String.Normalize 方法,將子字串轉換成單一 UTF-16 編碼的程式碼單位。 下列範例會呼叫 String.Normalize 方法,將基底字元 U+0061 (LATIN SMALL LETTER A) ,並將字元 U+0308 (COMBINING DIAERESIS) 合併為 U+00E4 (LATIN SMALL LETTER A WITH DIAERESIS) 。

    using System; public class Example public static void Main() string combining = "\u0061\u0308"; ShowString(combining); string normalized = combining.Normalize(); ShowString(normalized); private static void ShowString(string s) Console.Write("Length of string: {0} (", s.Length); for (int ctr = 0; ctr < s.Length; ctr++) { Console.Write("U+{0:X4}", Convert.ToUInt16(s[ctr])); if (ctr != s.Length - 1) Console.Write(" "); Console.WriteLine(")\n"); // The example displays the following output: // Length of string: 2 (U+0061 U+0308) // Length of string: 1 (U+00E4) open System let showString (s: string) = printf $"Length of string: {s.Length} (" for i = 0 to s.Length - 1 do printf $"U+{Convert.ToUInt16 s[i]:X4}" if i <> s.Length - 1 then printf " " printfn ")\n" let combining = "\u0061\u0308" showString combining let normalized = combining.Normalize() showString normalized // The example displays the following output: // Length of string: 2 (U+0061 U+0308) // Length of string: 1 (U+00E4) Module Example Public Sub Main() Dim combining As String = ChrW(&h0061) + ChrW(&h0308) ShowString(combining) Dim normalized As String = combining.Normalize() ShowString(normalized) End Sub Private Sub ShowString(s As String) Console.Write("Length of string: {0} (", s.Length) For ctr As Integer = 0 To s.Length - 1 Console.Write("U+{0:X4}", Convert.ToUInt16(s(ctr))) If ctr <> s.Length - 1 Then Console.Write(" ") Console.WriteLine(")") Console.WriteLine() End Sub End Module ' The example displays the following output: ' Length of string: 2 (U+0061 U+0308) ' Length of string: 1 (U+00E4) 將 Char 物件或代理配對 Char 物件轉換成字碼點 針對單一字元: Convert.ToInt32(Char)

    針對代理字組或字串中的字元: Char.ConvertToUtf32

    Rune 請參閱類型。 取得字元的 Unicode 類別 GetUnicodeCategory

    另請參閱 Rune.GetUnicodeCategory 。 判斷字元是否在特定 Unicode 類別中,例如數位、字母、標點符號、控制字元等等 IsControl IsDigit IsHighSurrogate IsLetter 、、、 IsLowSurrogate IsPunctuation IsSurrogate IsSeparator IsSurrogatePair IsLower IsNumber IsLetterOrDigit 、 和 IsSymbol IsUpper IsWhiteSpace

    另請參閱型別上的 Rune 對應方法。 Char 將代表數位的 物件轉換成數數值型別 GetNumericValue

    另請參閱 Rune.GetNumericValue 。 將字串中的字元轉換成 Char 物件 Parse TryParse Char 物件轉換成 String 物件 ToString 變更 物件的大小寫 Char ToLower ToLowerInvariant ToUpper ToUpperInvariant

    另請參閱型別上的 Rune 對應方法。

    執行緒安全性

    此類型的所有成員都是安全線程。 看似修改實例狀態的成員,實際上會傳回以新值初始化的新實例。 如同任何其他類型,讀取和寫入包含此類型實例的共用變數必須受到鎖定保護,以確保執行緒安全。

  • IComparable
  • IConvertible
  • String
  •