2013-03-20 10 views
9

sto vedendo questo strano problema, e non riesce a trovare nulla di simile a questo ovunque sul web:Perché "K" .Lunghezza mi dà risultati errati?

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 

ho provato questo in vari progetti C# e anche chiesto un altro sviluppatore per confermare il comportamento è identico in un progetto diverso su una macchina diversa.

ho provato lo stesso in VB.NET:

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

Perchè sono perderla?

+0

"Quick" del debugger's "" K ".Length' mostra 1. – AgentFire

+0

Immediato del debugger' " K ".Lunghezza' mostra 1. – AgentFire

+0

Non è uno spazio prima di K nel primo esempio? :) – koss

risposta

12

Questo perché "K", a differenza di "K", ha un carattere invisibile in esso, vale a dire un valore di ascii di 30 (separatore di record).

È possibile verificare questo facendo

byte[] bytes = Encoding.ASCII.GetBytes("K"); 
+0

di me eh. – AgentFire

+0

Ora la domanda, come è apparsa questa "K" magica? –

+1

Penso che la differenza sia chi ha copypasted l'esempio del codice e chi l'ha scritto da solo ... –

6

Il tuo "K" in realtà contiene due caratteri. Una "K" e l'altro simbolo invisibile unicode. Quando digito chiaramente "-K-" mostra 1, quando copio-incolla il tuo codice, è 2. Incollalo due volte e sarà 4.