2010-08-24 14 views

Odpowiedz

68

Spróbuj następującą

string str = ...; 
bool isLetter = !String.IsNullOrEmpty(str) && Char.IsLetter(str[0]); 
+22

Nieco krótsza: 'Char.IsLetter (str.FirstOrDefault())' – driis

+5

@driis że działa, ale dodaje kilka zbędnych alokacje do czego powinna być wolna alokacja check – JaredPar

+0

dziękuję każdy za twoją pomoc, nie byłam pewna, kogo nagrodzić, skoro wszyscy pomogliście, po prostu wyjechałem z największą liczbą już zorientowałem się w pierwszych zwycięstwach? dziękuję wszystkim. – korben

0
return (myString[0] >= 'A' && myString[0] <= 'Z') || (myString[0] >= 'a' && myString[0] <= 'z') 
+6

Litery nie są ograniczone do A-Z. Na przykład Æ to duńska litera. – driis

+3

Dni ASCII zniknęły. Teraz wszystkie fajne dzieci używają Unicode! http://www.joelonsoftware.com/articles/Unicode.html –

+0

mea culpa - zwłaszcza, że ​​używam unicode :-( –

0

należy zajrzeć do tabeli ASCII, stół, który systematycznie map char do wartości całkowitych. Wszystkie małe litery są sekwencyjne (97-122), podobnie jak wszystkie wielkie litery (65-90). Wiedząc o tym, nie musisz nawet rzutować na wartości int, tylko sprawdź, czy pierwszy znak ciągu znajduje się w jednym z tych dwóch zakresów (włącznie).

+1

Nie powiedział, że litery są ograniczone do zestawu znaków ASCII – driis

+0

@maxstar: Wiedząc, że ASCII używa wartości sekwencyjnych dla' AZ' i 'a'-' z', wolałbym rozwiązanie Marka nad to, ponieważ jego rozwiązanie unika używania magicznych liczb.Możesz także dostosować swoje rozwiązanie, definiując stałe gdzieś na 97/122/65/90, ale to dodaje niepotrzebne stałe, więc nadal wolę rozwiązanie Marka. .IsLetter' jak zasugerował JaredPar jest jeszcze lepszy – Brian

+0

Całkowicie zgadzam się, że używanie Char.IsLettera może być lepsze.Jestem tylko sugeruje, że korben sprawdza tabelę ASCII, aby wiedzieć, że postacie nie są po prostu losowo unoszone n cyber przestrzeni, ale są systematycznie uporządkowane i mapowane na liczby. Wierzę, że wiedząc, że jest to ważniejsze i bardziej korzystne niż samo uzyskanie odpowiedzi na przesłane pytanie, ponieważ zapewnia to zrozumienie. A przy okazji, miałem na myśli dokładnie to, co napisał Mark: kiedy powiedziałem "w jednym z tych dwóch zakresów" miałem na myśli zakresy znaków, nie int. Przepraszam za nieporozumienie. – user400348

7

Wypróbuj następujące

bool isValid = char.IsLetter(name.FirstOrDefault()); 
Powiązane problemy