2010-04-23 10 views
29

yo estaba tratando de utilizar TextInfo.ToTitleCase para convertir algunos nombres para el caso apropiado. funciona bien para cadenas en minúsculas y mayúsculas y minúsculas, pero para cadenas con todos los caracteres en mayúsculas, devuelve la cadena de entrada como está.
No se menciona nada acerca de este comportamiento en la documentación de MSDN, alguna información?TextInfo.ToTitleCase no funciona como se esperaba para todos los casquillos cadenas

Respuesta

60

Desde MSDN docs:

Observaciones En general, la carcasa del título convierte el primer carácter de una palabra en mayúsculas y el resto de los caracteres en minúsculas. Sin embargo, , este método no proporciona actualmente una carcasa adecuada para convertir una palabra que está completamente en mayúscula, como el acrónimo. La siguiente tabla muestra la forma en que el método representa varias cadenas.

por lo que se espera un comportamiento. Primero puede minúsculas su cadena si todo está en mayúsculas, luego ejecute ToTitleCase en ella.

+0

Tienes razón, me lo perdí al leer la documentación. –

+0

@Nims - En su defensa tardía, los documentos [actuales] no dicen que ToTitleCase no hará sentadillas hasta el límite. Mi primera impresión fue que * no ignoraría * todas las mayúsculas y titularía el caso de todos modos. Whoops. 'textInfo.ToTitleCase (strAllCaps.ToLower())' es. – ruffin

+2

La documentación actual también dice "Nos reservamos el derecho de hacer que esta API sea más lenta en el futuro". ¡Me encanta Microsoft! (: – chessofnerd

7

Sospecho que es porque se espera que las palabras en todas las mayúsculas sean abreviaturas como USA.

Por ejemplo, no se puede esperar "Terremoto golpea EE.UU." para cambiar a "sismo sacude USA" ¿verdad?

+0

Eso es un error entonces. Unicode especifica "EE. UU." -> "Estados Unidos". Editar: OK, no es un error, como se menciona en los documentos, pero es un comportamiento sorprendente. – leppie

4

La documentación de MSDN dice:

En general, la carcasa del título convierte el primer carácter de una palabra en mayúsculas y el resto de los caracteres en minúsculas. Sin embargo, una palabra que está completamente en mayúsculas, como un acrónimo, no se convierte.

Por lo tanto, funciona según lo previsto. Trate TextInfo.ToTitleCase(TextInfo.ToLowerCase("STRINGINCAPS")

como:

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

Debo añadir la redacción modificada en .net 3.5, y no es tan claro sobre este hecho. – Kobi

Cuestiones relacionadas