10

我看到了这个奇怪的问题,并且在网络上的任何地方都找不到类似的东西:

int l = "K".Length;    //This actually returns 2 !!! The 'Autos' window in
                       //the debugger also shows "K".Length as 2.

string s = "K";
l = s.Length;          //Whereas this returns 1 as expected

我在各种 C# 项目中尝试过这个,甚至要求另一个开发人员确认在不同机器上的不同项目中的行为是相同的。

我在 VB.NET 中尝试了同样的方法:

Dim l As Integer = "K".Length    'This returns 1 correctly

我会失去它吗?

4

2 回答 2

12

这是因为“K”与“K”不同,其中有一个不可见的字符,即 ascii 值 30(记录分隔符)。

您可以通过这样做来验证这一点

byte[] bytes = Encoding.ASCII.GetBytes("K");
于 2013-03-20T11:40:04.040 回答
6

您的“K”实际上包含两个字符。一个“K”和另一个 unicode 不可见符号。当我输入清楚"-K-"时它显示1,当我复制粘贴你的代码时,它是2。粘贴两次它会是4。

于 2013-03-20T11:41:01.657 回答