10

この奇妙な問題が発生しており、これに似たものは Web のどこにも見つかりません。

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" には非表示の文字、つまり 30 の ascii 値 (レコード区切り) が含まれているためです。

これを確認するには、

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

あなたの「K」には、実際には 2 つの文字が含まれています。1 つの「K」と、もう 1 つの Unicode 非表示記号。明確に入力すると"-K-"1が表示され、コードをコピーして貼り付けると2になります。2回貼り付けると4になります。

于 2013-03-20T11:41:01.657 に答える