2013-03-20 30 views
9

widzę ten dziwny problem, i nie mogę znaleźć nic podobnego do tego w dowolnym miejscu na stronie:Dlaczego "K". Długość daje mi zły wynik?

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 

Próbowałem to w różnych C# projektów, a nawet poprosił innego programistę, aby potwierdzić zachowanie jest identyczne w sposób inny projekt na innej maszynie.

Próbowałem to samo w VB.NET:

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

jestem tracąc go?

+0

debugger za quickwatch na '„K”.Length' pokazuje 1. – AgentFire

+0

Debugger bezpośrednim na'” K ".Length' pokazuje 1. – AgentFire

+0

Czy to nie jest spacja przed K w pierwszym przykładzie? :) – koss

Odpowiedz

12

To dlatego, że "K", w przeciwieństwie do "K", ma w sobie niewidzialną postać, a mianowicie wartość ascii 30 (separator rekordów).

Można to sprawdzić wykonując

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

FAster ode mnie huh. – AgentFire

+0

Teraz pytanie, jak się pojawiło to magiczne "K"? –

+1

Myślę, że różnica polega na tym, kto skopiował próbkę kodu i sam ją napisał ... –

6

Twój "K" faktycznie zawiera dwa znaki. Jeden "K" i drugi niewidzialny symbol Unicode. Po wpisaniu wyraźnie "-K-" pokazuje 1, kiedy skopiować i wkleić kod, to 2. Wklej go dwa razy i to będzie 4.

Powiązane problemy