Duration (Pacific Standard Time):
To (Pacific Standard Time):
Impact:
  • None
User Action:
  • None
.NET Framework Class Library

Char Structure

Represents a character as a UTF-16 code unit.

Namespace:  System
Assembly:  mscorlib (in mscorlib.dll)
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Structure Char _
	Implements IComparable, IConvertible, IComparable(Of Char),  _
	IEquatable(Of Char)

The Char type exposes the following members.

  Name Description
Public method Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps CompareTo(Char) Compares this instance to a specified Char object and indicates whether this instance precedes, follows, or appears in the same position in the sort order as the specified Char object.
Public method Supported by the XNA Framework CompareTo(Object) Compares this instance to a specified object and indicates whether this instance precedes, follows, or appears in the same position in the sort order as the specified Object.
Public method Static member Supported by Portable Class Library Supported in .NET for Windows Store apps ConvertFromUtf32 Converts the specified Unicode code point into a UTF-16 encoded string.
Public method Static member Supported by Portable Class Library Supported in .NET for Windows Store apps ConvertToUtf32(Char, Char) Converts the value of a UTF-16 encoded surrogate pair into a Unicode code point.
Public method Static member Supported by Portable Class Library Supported in .NET for Windows Store apps ConvertToUtf32(String, Int32) Converts the value of a UTF-16 encoded character or surrogate pair at a specified position in a string into a Unicode code point.
Public method Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps Equals(Char) Returns a value that indicates whether this instance is equal to the specified Char object.
Public method Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps Equals(Object) Returns a value that indicates whether this instance is equal to a specified object. (Overrides ValueType.Equals(Object).)
Public method Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps GetHashCode Returns the hash code for this instance. (Overrides ValueType.GetHashCode().)
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps GetNumericValue(Char) Converts the specified numeric Unicode character to a double-precision floating point number.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps GetNumericValue(String, Int32) Converts the numeric Unicode character at the specified position in a specified string to a double-precision floating point number.
Public method Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps GetType Gets the Type of the current instance. (Inherited from Object.)
Public method Supported by the XNA Framework GetTypeCode Returns the TypeCode for value type Char.
Public method Static member Supported by the XNA Framework GetUnicodeCategory(Char) Categorizes a specified Unicode character into a group identified by one of the UnicodeCategory values.
Public method Static member Supported by the XNA Framework GetUnicodeCategory(String, Int32) Categorizes the character at the specified position in a specified string into a group identified by one of the UnicodeCategory values.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsControl(Char) Indicates whether the specified Unicode character is categorized as a control character.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsControl(String, Int32) Indicates whether the character at the specified position in a specified string is categorized as a control character.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsDigit(Char) Indicates whether the specified Unicode character is categorized as a decimal digit.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsDigit(String, Int32) Indicates whether the character at the specified position in a specified string is categorized as a decimal digit.
Public method Static member Supported by Portable Class Library Supported in .NET for Windows Store apps IsHighSurrogate(Char) Indicates whether the specified Char object is a high surrogate.
Public method Static member Supported by Portable Class Library Supported in .NET for Windows Store apps IsHighSurrogate(String, Int32) Indicates whether the Char object at the specified position in a string is a high surrogate.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsLetter(Char) Indicates whether the specified Unicode character is categorized as a Unicode letter.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsLetter(String, Int32) Indicates whether the character at the specified position in a specified string is categorized as a Unicode letter.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsLetterOrDigit(Char) Indicates whether the specified Unicode character is categorized as a letter or a decimal digit.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsLetterOrDigit(String, Int32) Indicates whether the character at the specified position in a specified string is categorized as a letter or a decimal digit.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsLower(Char) Indicates whether the specified Unicode character is categorized as a lowercase letter.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsLower(String, Int32) Indicates whether the character at the specified position in a specified string is categorized as a lowercase letter.
Public method Static member Supported by Portable Class Library Supported in .NET for Windows Store apps IsLowSurrogate(Char) Indicates whether the specified Char object is a low surrogate.
Public method Static member Supported by Portable Class Library Supported in .NET for Windows Store apps IsLowSurrogate(String, Int32) Indicates whether the Char object at the specified position in a string is a low surrogate.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsNumber(Char) Indicates whether the specified Unicode character is categorized as a number.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsNumber(String, Int32) Indicates whether the character at the specified position in a specified string is categorized as a number.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsPunctuation(Char) Indicates whether the specified Unicode character is categorized as a punctuation mark.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsPunctuation(String, Int32) Indicates whether the character at the specified position in a specified string is categorized as a punctuation mark.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsSeparator(Char) Indicates whether the specified Unicode character is categorized as a separator character.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsSeparator(String, Int32) Indicates whether the character at the specified position in a specified string is categorized as a separator character.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsSurrogate(Char) Indicates whether the specified character has a surrogate code unit.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsSurrogate(String, Int32) Indicates whether the character at the specified position in a specified string has a surrogate code unit.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsSurrogatePair(Char, Char) Indicates whether the two specified Char objects form a surrogate pair.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsSurrogatePair(String, Int32) Indicates whether two adjacent Char objects at a specified position in a string form a surrogate pair.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsSymbol(Char) Indicates whether the specified Unicode character is categorized as a symbol character.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsSymbol(String, Int32) Indicates whether the character at the specified position in a specified string is categorized as a symbol character.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsUpper(Char) Indicates whether the specified Unicode character is categorized as an uppercase letter.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsUpper(String, Int32) Indicates whether the character at the specified position in a specified string is categorized as an uppercase letter.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsWhiteSpace(Char) Indicates whether the specified Unicode character is categorized as white space.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps IsWhiteSpace(String, Int32) Indicates whether the character at the specified position in a specified string is categorized as white space.
Public method Static member Parse Converts the value of the specified string to its equivalent Unicode character.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps ToLower(Char) Converts the value of a Unicode character to its lowercase equivalent.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library ToLower(Char, CultureInfo) Converts the value of a specified Unicode character to its lowercase equivalent using specified culture-specific formatting information.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps ToLowerInvariant Converts the value of a Unicode character to its lowercase equivalent using the casing rules of the invariant culture.
Public method Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps ToString() Converts the value of this instance to its equivalent string representation. (Overrides ValueType.ToString().)
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps ToString(Char) Converts the specified Unicode character to its equivalent string representation.
Public method Supported by the XNA Framework ToString(IFormatProvider) Converts the value of this instance to its equivalent string representation using the specified culture-specific format information.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps ToUpper(Char) Converts the value of a Unicode character to its uppercase equivalent.
Public method Static member Supported by the XNA Framework Supported by Portable Class Library ToUpper(Char, CultureInfo) Converts the value of a specified Unicode character to its uppercase equivalent using specified culture-specific formatting information.
Public method Static member Supported by Portable Class Library Supported in .NET for Windows Store apps ToUpperInvariant Converts the value of a Unicode character to its uppercase equivalent using the casing rules of the invariant culture.
Public method Static member Supported by Portable Class Library Supported in .NET for Windows Store apps TryParse Converts the value of the specified string to its equivalent Unicode character. A return code indicates whether the conversion succeeded or failed.
Top
  Name Description
Public field Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps MaxValue Represents the largest possible value of a Char. This field is constant.
Public field Static member Supported by the XNA Framework Supported by Portable Class Library Supported in .NET for Windows Store apps MinValue Represents the smallest possible value of a Char. This field is constant.
Top
  Name Description
Explicit interface implemetation Private method Supported by Portable Class Library Supported in .NET for Windows Store apps IComparable.CompareTo Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertible.ToBoolean Infrastructure. Note   This conversion is not supported. Attempting to do so throws an InvalidCastException.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertible.ToByte Infrastructure. For a description of this member, see IConvertible.ToByte.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertible.ToChar Infrastructure. For a description of this member, see IConvertible.ToChar.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertible.ToDateTime Infrastructure. Note   This conversion is not supported. Attempting to do so throws an InvalidCastException.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertible.ToDecimal Infrastructure. Note   This conversion is not supported. Attempting to do so throws an InvalidCastException.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertible.ToDouble Infrastructure. Note   This conversion is not supported. Attempting to do so throws an InvalidCastException.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertible.ToInt16 Infrastructure. For a description of this member, see IConvertible.ToInt16.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertible.ToInt32 Infrastructure. For a description of this member, see IConvertible.ToInt32.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertible.ToInt64 Infrastructure. For a description of this member, see IConvertible.ToInt64.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertible.ToSByte Infrastructure. For a description of this member, see IConvertible.ToSByte.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertible.ToSingle Infrastructure. Note   This conversion is not supported. Attempting to do so throws an InvalidCastException.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertible.ToType Infrastructure. For a description of this member, see IConvertible.ToType.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertible.ToUInt16 Infrastructure. For a description of this member, see IConvertible.ToUInt16.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertible.ToUInt32 Infrastructure. For a description of this member, see IConvertible.ToUInt32.
Explicit interface implemetation Private method Supported by the XNA Framework IConvertible.ToUInt64 Infrastructure. For a description of this member, see IConvertible.ToUInt64.
Top

The .NET Framework uses the Char structure to represent a Unicode character. The Unicode Standard identifies each Unicode character with a unique 21-bit scalar number called a code point, and defines the UTF-16 encoding form that specifies how a code point is encoded into a sequence of one or more 16-bit values. Each 16-bit value ranges from hexadecimal 0x0000 through 0xFFFF and is stored in a Char structure. The value of a Char object is its 16-bit numeric (ordinal) value.

Char Objects, Unicode Characters, and Strings

A String object is a sequential collection of Char structures that represents a string of text. Most Unicode characters can be represented by a single Char object, but a character that is encoded as a base character, surrogate pair, and/or combining character sequence is represented by multiple Char objects. For this reason, a Char structure in a String object is not necessarily equivalent to a single Unicode character.

Multiple 16-bit code units are used to represent single Unicode characters in the following cases:

  • Glyphs, which may consist of a single character or of a base character followed by one or more combining characters. For example, the character ä is represented by a Char object whose code unit is U+0061 followed by a Char object whose code unit is U+0308. (The character ä can also be defined by a single Char object that has a code unit of U+00E4.) The following example illustrates that the character ä consists of two Char objects.

    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: 
    '       ä
    
  • Characters outside the Unicode Basic Multilingual Plane (BMP). Unicode supports sixteen planes in addition to the BMP, which represents plane 0. A Unicode code point is represented in UTF-32 by a 21-bit value that includes the plane. For example, U+1D160 represents the MUSICAL SYMBOL EIGHTH NOTE character. Because UTF-16 encoding has only 16 bits, characters outside the BMP are represented by surrogate pairs in UTF-16. The following example illustrates that the UTF-32 equivalent of U+1D160, the MUSICAL SYMBOL EIGHTH NOTE character, is U+D834 U+DD60. U+D834 is the high surrogate; high surrogates range from U+D800 through U+DBFF. U+DD60 is the low surrogate; low surrogates range from U+DC00 through U+DFFF.

    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
    

Characters and Text Elements

Because a single character can be represented by multiple Char objects, it is not always meaningful to work with individual Char objects. For instance, the following example converts the Unicode code points that represent the Aegean numbers zero through 9 to UTF-16 encoded code units. Because it erroneously equates Char objects with characters, it inaccurately reports that the resulting string has 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.

You can do the following to avoid the assumption that a Char object represents a single character.

  • You can work with a String object in its entirety instead of working with its individual characters to represent and analyze linguistic content.

  • You can use the StringInfo class to work with text elements instead of individual Char objects. The following example uses the StringInfo object to count the number of text elements in a string that consists of the Aegean numbers zero through nine. Because it considers a surrogate pair a single character, it correctly reports that the string contains ten 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.
    
  • If a string contains a base character that has one or more combining characters, you can call the String.Normalize method to convert the substring to a single UTF-16 encoded code unit. The following example calls the String.Normalize method to convert the base character U+0061 (LATIN SMALL LETTER A) and combining character U+0308 (COMBINING DIAERESIS) to U+00E4 (LATIN SMALL LETTER A WITH DIAERESIS).

    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)
    

Common Operations

The Char structure provides methods to compare Char objects, convert the value of the current Char object to an object of another type, and determine the Unicode category of a Char object:

To do this

Use these System.Char methods

Compare Char objects

CompareTo and Equals

Convert a code point to a string

ConvertFromUtf32

Convert a Char object or a surrogate pair of Char objects to a code point

ConvertToUtf32

Get the Unicode category of a character

GetUnicodeCategory

Determine whether a character is in a particular Unicode category such as digit, letter, punctuation, control character, and so on

IsControl , IsDigit, IsHighSurrogate, IsLetter, IsLetterOrDigit, IsLower, IsLowSurrogate, IsNumber, IsPunctuation, IsSeparator, IsSurrogate, IsSurrogatePair, IsSymbol, IsUpper, and IsWhiteSpace

Convert a Char object that represents a number to a numeric value type

GetNumericValue

Convert a character in a string into a Char object

Parse and TryParse

Convert a Char object to a String object

ToString

Change the case of a Char object

ToLower , ToLowerInvariant, ToUpper, and ToUpperInvariant

The following code example demonstrates some of the methods in Char.

imports System

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 Framework

Supported in: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Portable Class Library

Supported in: Portable Class Library

.NET for Windows Store apps

Supported in: Windows 8

.NET for Windows Phone apps

Supported in: Windows Phone 8.1, Windows Phone Silverlight 8.1, Windows Phone Silverlight 8

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

All members of this type are thread safe. Members that appear to modify instance state actually return a new instance initialized with the new value. As with any other type, reading and writing to a shared variable that contains an instance of this type must be protected by a lock to guarantee thread safety.