2012-01-23 11 views
5

¿La mejor manera de hacerlo?C# String Manipulation: de "TABLE_NAME" a "TableName"

cosas por el estilo: Probamos

public String FormatColumnName(String columnName) 
{ 
    String formatedColumnName = columnName.Replace('_', ' ').Trim(); 
    StringBuilder result = new StringBuilder(formatedColumnName); 
    result[0] = char.ToUpper(result[0]); 
    return result.ToString(); 
} 

no funcionó para mí, tal vez alguien me podría dar una solución limpia sobre cómo puedo hacer eso.

Respuesta

5

¿Qué tal:

string result = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(
     columnName.Replace('_', ' ').Trim().ToLower()).Replace(" ",""); 

ToTitleCase cambios palabras "minúscula" a "minúscula" Words (pero no toca mayúsculas), de ahí la necesidad de ToLower - a continuación, quitamos los espacios con Replace .

+0

yo probamos este, resultado es TABLENAME, también he intentado algo similar antes, o bien no funcionó – eMi

+0

@eMi yo sólo lo he probado y funciona bien; por favor actualice ... (Edité) –

+0

Supongo que es correcto, pero .Trim() no eliminará '' en el medio de la cadena, por lo que el espacio en blanco debe ser reemplazado. –

5

String.Concat(columnName.Split('_').Select(s => s[0] + s.Substring(1).ToLower()))

+0

** + 1 ** Me gustó el 'LINQ' ... – gdoron

+0

+ 1 porque esto también funcionó – eMi

+0

@eMi, no solo funciona, es mucho más legible y ** quizás ** sea más eficiente – gdoron

2
string str = "TABLE_NAME"; 

string str2 = string.Join("", str.Split('_').Select(p => char.ToUpper(p[0]) + p.Substring(1).ToLower())); 
+0

+ 1 porque esto también funcionó – eMi