2010-04-23 14 views
29

Stavo cercando di utilizzare TextInfo.ToTitleCase per convertire alcuni nomi nel caso corretto. funziona bene per le stringhe in lettere minuscole e miste ma per le stringhe con tutti i caratteri in maiuscolo, restituisce la stringa di input così com'è.
Nulla su questo comportamento è menzionato nella documentazione MSDN, eventuali approfondimenti?TextInfo.ToTitleCase non funziona come previsto per le stringhe ALL CAPS

risposta

60

Da MSDN docs:

Osservazione In generale, involucro titolo converte il primo carattere di una parola in maiuscolo e il resto dei personaggi in minuscolo. Tuttavia, , questo metodo non fornisce attualmente l'involucro corretto per convertire una parola interamente maiuscola, ad esempio un acronimo. La seguente tabella mostra il modo in cui il metodo esegue il rendering di più stringhe.

quindi è il comportamento previsto. Potresti mettere in minuscolo la stringa prima se è tutto in maiuscolo, quindi eseguire ToTitleCase su di essa.

+0

Hai ragione, l'ho perso mentre leggevo la documentazione. –

+0

@Nims - Nella tua tardiva difesa, i documenti [attuali] non dicono che ToTitleCase non eseguirà lo squat a maiuscole. La mia prima impressione è stata che non avrebbe ignorato * maiuscole e avrebbe comunque avuto il titolo. Ops. 'textInfo.ToTitleCase (strAllCaps.ToLower())' lo è. – ruffin

+2

La documentazione corrente dice anche "Ci riserviamo il diritto di rendere questa API più lenta in futuro." Devo amare Microsoft! (: – chessofnerd

7

Ho il sospetto che sia perché le parole in tutte le capitali sono le abbreviazioni come gli Stati Uniti.

Ad esempio, non ci si aspetterebbe che "Terremoti colpiti USA" vengano modificati in "Terremoti colpiti negli Usa", vero?

+0

Questo è un bug allora. Unicode specifica "USA" -> "Usa". Modifica: OK, non un bug, come menzionato nei documenti, ma comportamento sorprendente. – leppie

4

La documentazione MSDN dice:

In generale, involucro titolo converte il primo carattere di una parola in maiuscolo e il resto dei personaggi in minuscolo. Tuttavia, una parola interamente maiuscola, ad esempio un acronimo, non viene convertita.

Quindi funziona come previsto. Prova TextInfo.ToTitleCase(TextInfo.ToLowerCase("STRINGINCAPS")

come:

string TitleCaseString; 
TextInfo myTI = new CultureInfo("en-US",false).TextInfo; 
TitleCaseString = myTI.ToTitleCase(myTI.ToLowerCase("STRINGINCAPS")); 
+0

Dovrei aggiungere la dicitura modificata in .net 3.5 e non è chiaro riguardo a questo fatto. – Kobi

Problemi correlati