Char 結構

定義

將字元表示為 UTF-16 程式碼單位。

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, IConvertible
public value class char : IComparable, IComparable<char>, IEquatable<char>
public struct Char : IComparable, IComparable<char>, IConvertible, IEquatable<char>
public struct Char : IComparable, IComparable<char>, IConvertible, IEquatable<char>, ISpanFormattable
[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
[<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 IComparable, IConvertible
Public Structure Char
Implements IComparable, IComparable(Of Char), IEquatable(Of Char)
繼承
屬性
實作

範例

下列程式碼範例示範中的一些方法 Char

using namespace System;
int 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' ); // 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 字元和字串

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

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

  • 圖像,可能包含單一字元或基底字元,後面接著一或多個組合字元。 例如,字元ä是由 Char 其程式碼單位為 u + 0061 的物件所代表,後面接著程式 Char 代碼單位為 u + 0308 的物件。 (,您也可以透過 Char 具有 U + 00E4 程式碼單位的單一物件來定義該字元。 ) 下列範例將說明該字元ä是由兩個物件所組成 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) 。 Unicode 除了代表平面0的 BMP 之外,還支援十六個平面。 Unicode 程式碼點是由包含平面的21位值以 UTF-32 表示。 例如,U + 1D160 代表音樂符號第八個備註字元。 由於 UTF-16 編碼只有16位,因此 BMP 以外的字元會以 UTF-16 中的代理配對來表示。 下列範例說明與 U + 1D160 (音樂符號第8個附注字元)相同的 32 UTF-8,其為 U + D834 U + DD60。 U + D834 是高代理;高代理從 U + D800 到 U + DBFF 的範圍。 U + DD60 是低代理;從 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))
          Next
          Return retval.Trim()
       End Function
    End Module
    ' The example produces the following output:
    '       U+01D160 UTF-32 = ð (U+D834 U+DD60) UTF-16
    

字元和字元類別

每個 Unicode 字元或有效的代理配對都屬於 Unicode 分類。 例如,在 .NET 中,Unicode 類別目錄是以列舉的成員表示, UnicodeCategory 並包含如 UnicodeCategory.CurrencySymbol 、和等值 UnicodeCategory.LowercaseLetter UnicodeCategory.SpaceSeparator

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

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)) 
      Next
   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 方法取決於類別所報告的 Unicode 分類 CharUnicodeInfo 。 從 .NET Framework 4.6.2 開始,會根據unicode 標準8.0.0 版將 unicode 字元分類。 在 .NET Framework 4 到 .NET Framework 4.6.1 的 .NET Framework 版本中,它們會根據Unicode 標準6.3.0 版本進行分類。

字元和文字元素

因為單一字元可以由多個物件表示 Char ,所以使用個別物件並不一定有意義 Char 。 例如,下列範例會將代表希臘愛琴大學數位0到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)
      Next         
      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 會使用物件來計算字串中的文字元素數,其中包含希臘愛琴大學數位0到9。 因為它會將代理組視為單一字元,所以它會正確地報告字串包含十個字元。

    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)
          Next         
          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 (拉丁小寫字母 a) ,並結合字元 u + 0308 (結合分項) 到 U + 00E4 (拉丁文小寫字母 A 加上分) 。

    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(" ")
          Next 
          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 物件、將目前物件的值轉換 Char 成另一個型別的物件,以及判斷物件的 Unicode 類別 Char

作法 使用這些 System.Char 方法
比較 Char 物件 CompareToEquals
將程式碼點轉換成字串 ConvertFromUtf32

另請參閱 Rune 類型。
Char 物件或代理對的物件轉換成程式 Char 代碼點 針對單一字元: Convert.ToInt32(Char)

若為代理組或字串中的字元: Char.ConvertToUtf32

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

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

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

請參閱 Rune.GetNumericValue
將字串中的字元轉換成 Char 物件 ParseTryParse
Char 物件轉換為 String 物件 ToString
變更物件的大小寫 Char ToLowerToLowerInvariantToUpperToUpperInvariant

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

Char 值和 interop

當 managed Char 類型(以 UNICODE utf-16 編碼的程式碼單位表示)傳遞至非受控碼時,interop 封送處理器預設會將字元集轉換為 ANSI。 您可以將 DllImportAttribute 屬性(attribute)套用至平台叫用宣告,並將屬性(attribute)套用至 StructLayoutAttribute COM interop 宣告,以控制封送處理型別所使用的字元集 Char

欄位

MaxValue

表示 Char 最大的可能值。 這個欄位為常數。

MinValue

表示 Char 最小的可能值。 這個欄位為常數。

方法

CompareTo(Char)

比較這個執行個體與指定的 Char 物件,並且表示這個執行個體在排序次序中,位於所指定 Char 物件之前、之後或相同位置。

CompareTo(Object)

比較這個執行個體與指定的物件,並且表示這個執行個體在排序次序中,位於所指定 Object 之前、之後或相同位置。

ConvertFromUtf32(Int32)

將指定之 Unicode 字碼指標轉換成 UTF-16 編碼的字串。

ConvertToUtf32(Char, Char)

將 UTF-16 編碼之 Surrogate 字組的值轉換成 Unicode 字碼指標。

ConvertToUtf32(String, Int32)

將字串中指定之位置上的 UTF-16 編碼之字元或 Surrogate 字組的值轉換成 Unicode 字碼指標。

Equals(Char)

傳回值,表示這個執行個體是否等於指定的 Char 物件。

Equals(Object)

傳回值,這個值指出此執行個體是否與指定的物件相等。

GetHashCode()

傳回這個執行個體的雜湊碼。

GetNumericValue(Char)

將指定的數字 Unicode 字元轉換成雙精確度浮點數。

GetNumericValue(String, Int32)

將指定字串中指定位置的數字 Unicode 字元轉換成雙精確度浮點數。

GetTypeCode()

傳回實值類型 TypeCodeChar

GetUnicodeCategory(Char)

將指定的 Unicode 字元分類至由其中一個 UnicodeCategory 值所識別的群組。

GetUnicodeCategory(String, Int32)

將指定字串中指定位置處的字元,分類至由其中一個 UnicodeCategory 值所識別的群組。

IsAscii(Char)

true如果 c 是 ASCII 字元 ( [U + 0000. U + 007F] ) ,則會傳回。

IsControl(Char)

指示指定的 Unicode 字元是否分類為控制字元。

IsControl(String, Int32)

指示指定的字串中指定位置處的字元是否分類為控制字元。

IsDigit(Char)

指示指定的 Unicode 字元是否分類為十進位數字。

IsDigit(String, Int32)

指示指定的字串中指定位置處的字元是否分類為十進位數字。

IsHighSurrogate(Char)

指出指定的 Char 物件是否為高 Surrogate。

IsHighSurrogate(String, Int32)

表示字串中指定位置處的 Char 物件是否為高 Surrogate。

IsLetter(Char)

表示指定的 Unicode 字元是否分類為 Unicode 字母。

IsLetter(String, Int32)

指示指定的字串中指定位置處的字元是否分類為 Unicode 字母。

IsLetterOrDigit(Char)

指示指定的 Unicode 字元是否分類為字母或十進位數字。

IsLetterOrDigit(String, Int32)

指示指定的字串中指定位置處的字元是否分類為字母或十進位數字。

IsLower(Char)

指示指定的 Unicode 字元是否分類為小寫字母。

IsLower(String, Int32)

指示指定的字串中指定位置處的字元是否分類為小寫字母。

IsLowSurrogate(Char)

指出指定的 Char 物件是否為低 Surrogate。

IsLowSurrogate(String, Int32)

表示字串中指定位置處的 Char 物件是否為低 Surrogate。

IsNumber(Char)

指示指定的 Unicode 字元是否分類為數字。

IsNumber(String, Int32)

指示指定的字串中指定位置處的字元是否分類為數字。

IsPunctuation(Char)

指示指定的 Unicode 字元是否分類為標點符號。

IsPunctuation(String, Int32)

指示指定的字串中指定位置處的字元是否分類為標點符號。

IsSeparator(Char)

指示指定的 Unicode 字元是否分類為分隔符號字元。

IsSeparator(String, Int32)

指示指定的字串中指定位置處的字元是否分類為分隔符號字元。

IsSurrogate(Char)

指出指定的字元是否有 Surrogate 字碼單位。

IsSurrogate(String, Int32)

指出位於指定的字串中指定位置處的字元是否有 Surrogate 字碼單位。

IsSurrogatePair(Char, Char)

表示兩個指定的 Char 物件是否組成 Surrogate 字組。

IsSurrogatePair(String, Int32)

表示字串中指定位置處的兩個相鄰 Char 物件是否組成 Surrogate 字組。

IsSymbol(Char)

指示指定的 Unicode 字元是否分類為符號字元。

IsSymbol(String, Int32)

指示指定的字串中指定位置處的字元是否分類為符號字元。

IsUpper(Char)

指示指定的 Unicode 字元是否分類為大寫字母。

IsUpper(String, Int32)

指示指定的字串中指定位置處的字元是否分類為大寫字母。

IsWhiteSpace(Char)

指示指定的 Unicode 字元是否分類為泛空白字元。

IsWhiteSpace(String, Int32)

指示指定的字串中指定位置處的字元是否分類為泛空白字元。

Parse(String)

將指定的字串值轉換成它的對等 Unicode 字元。

ToLower(Char)

將 Unicode 字元值轉換成它的對等小寫。

ToLower(Char, CultureInfo)

使用指定的特定文化特性格式資訊,將指定的 Unicode 字元值轉換成它的對等小寫。

ToLowerInvariant(Char)

使用不因文化特性而異 (Invariant Culture) 的轉換規則,將 Unicode 字元的值轉換成其小寫的同等項目。

ToString()

將這個執行個體的值轉換為它的相等字串表示。

ToString(Char)

將指定的 Unicode 字元轉換成它的對等字串表示。

ToString(IFormatProvider)

使用指定的特定文化特性的格式資訊,將這個執行個體的值轉換為它的對等字串表示。

ToUpper(Char)

將 Unicode 字元值轉換成它的對等大寫。

ToUpper(Char, CultureInfo)

使用指定的特定文化特性格式資訊,將指定的 Unicode 字元值轉換成它的對等大寫。

ToUpperInvariant(Char)

使用不因文化特性而異的轉換規則,將 Unicode 字元的值轉換成其大寫的同等項目。

TryParse(String, Char)

將指定的字串值轉換成它的對等 Unicode 字元。 傳回碼 (Return Code) 會指出轉換是成功或是失敗。

明確介面實作

IComparable.CompareTo(Object)

將目前的執行個體與相同類型的另一個物件相比較,並傳回整數,這個整數表示目前的執行個體在排序次序中,位於另一個物件之前、之後或相同位置。

IConvertible.GetTypeCode()

傳回這個執行個體的 TypeCode

IConvertible.ToBoolean(IFormatProvider)

注意:不支援這項轉換。 嘗試這麼做會擲回 InvalidCastException

IConvertible.ToByte(IFormatProvider)

如需這個成員的說明,請參閱 ToByte(IFormatProvider)

IConvertible.ToChar(IFormatProvider)

如需這個成員的說明,請參閱 ToChar(IFormatProvider)

IConvertible.ToDateTime(IFormatProvider)

注意:不支援這項轉換。 嘗試這麼做會擲回 InvalidCastException

IConvertible.ToDecimal(IFormatProvider)

注意:不支援這項轉換。 嘗試這麼做會擲回 InvalidCastException

IConvertible.ToDouble(IFormatProvider)

注意:不支援這項轉換。 嘗試這麼做會擲回 InvalidCastException

IConvertible.ToInt16(IFormatProvider)

如需這個成員的說明,請參閱 ToInt16(IFormatProvider)

IConvertible.ToInt32(IFormatProvider)

如需這個成員的說明,請參閱 ToInt32(IFormatProvider)

IConvertible.ToInt64(IFormatProvider)

如需這個成員的說明,請參閱 ToInt64(IFormatProvider)

IConvertible.ToSByte(IFormatProvider)

如需這個成員的說明,請參閱 ToSByte(IFormatProvider)

IConvertible.ToSingle(IFormatProvider)

注意:不支援這項轉換。 嘗試這麼做會擲回 InvalidCastException

IConvertible.ToString(IFormatProvider)

使用指定限定文化特性的格式資訊,將此執行個體的值轉換為相等字串。

IConvertible.ToType(Type, IFormatProvider)

如需這個成員的說明,請參閱 ToType(Type, IFormatProvider)

IConvertible.ToUInt16(IFormatProvider)

如需這個成員的說明,請參閱 ToUInt16(IFormatProvider)

IConvertible.ToUInt32(IFormatProvider)

如需這個成員的說明,請參閱 ToUInt32(IFormatProvider)

IConvertible.ToUInt64(IFormatProvider)

如需這個成員的說明,請參閱 ToUInt64(IFormatProvider)

IFormattable.ToString(String, IFormatProvider)

使用指定的格式,格式化目前執行個體的值。

ISpanFormattable.TryFormat(Span<Char>, Int32, ReadOnlySpan<Char>, IFormatProvider)

嘗試將目前實例的值格式化為所提供的字元範圍。

適用於

執行緒安全性

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

另請參閱