c#中的\uffff是什么

Ste*_*eve 3 c#

当我尝试做

char c = (char)-1;
Run Code Online (Sandbox Code Playgroud)

我收到编译器错误,指出无法将常量值“-1”转换为“字符”

这让我认为这是一个无效的转换。但是当我在运行时执行此操作时,我会找回角色'\uffff'

出于好奇,那个字符是什么,为什么编译器不喜欢它?

Jam*_*aix 6

C# 使用 Unicode UTF-16 来编码字符串和字符。ffff在 UTF-16 中是“非字符”。当您使用\u它作为字符串前缀时,它会告诉 C# 将以下字符视为 Unicode 代码点。所以在这里,您的代码点是ffff十六进制或65535十进制。char在C#中被表示为a ushortunder the hood,两者之间存在隐式转换。这里-1超出了 的范围ushort并且溢出到ushort.MaxValue65535。(默认情况下,C# 中的整数运算不会在溢出时引发异常。要启用此行为,请使用checked块。)