metodos before c# .net string

c# - before - BestPractice-Transforma el primer carácter de una cuerda en minúsculas



string replace c# (7)

Combinado algunos y lo hizo una extensión encadenable. Se agregó un cortocircuito en espacios en blanco y sin letras.

public static string FirstLower(this string input) => (!string.IsNullOrWhiteSpace(input) && input.Length > 0 && char.IsLetter(input[0]) && !char.IsLower(input[0])) ? input[0].ToString().ToLowerInvariant() + input.Remove(0, 1) : input;

Me gustaría tener un método que transforme el primer carácter de una cadena en minúscula.

Mis enfoques:

1.

public static string ReplaceFirstCharacterToLowerVariant(string name) { return String.Format("{0}{1}", name.First().ToString().ToLowerInvariant(), name.Substring(1)); }

2.

public static IEnumerable<char> FirstLetterToLowerCase(string value) { var firstChar = (byte)value.First(); return string.Format("{0}{1}", (char)(firstChar + 32), value.Substring(1)); }

¿Cuál sería tu enfoque?


Dependiendo de la situación, un poco de programación defensiva podría ser deseable:

public static string FirstCharacterToLower(string str) { if (String.IsNullOrEmpty(str) || Char.IsLower(str, 0)) return str; return Char.ToLowerInvariant(str[0]) + str.Substring(1); }

La instrucción if también evita que se cree una nueva cadena si no se va a modificar de todos modos. Es posible que desee tener el método de error en la entrada nula en su lugar, y lanzar una ArgumentNullException .

Como han mencionado las personas, utilizar String.Format para esto es excesivo.


El mio es

if (!string.IsNullOrEmpty (val) && val.Length > 0) { return val[0].ToString().ToLowerInvariant() + val.Remove (0,1); }


Es mejor usar String.Concat que String.Format si sabe que el formato no es datos de cambio, y solo se desea concatenación.


Me gusta la respuesta aceptada, pero además de marcar string.IsNullOrEmpty también verificaría si Char.IsLower(name[1]) en caso de que se trate de abreviatura. Por ejemplo, no querría que el "SIDA" se convirtiera en "SIDA".


Solo en caso de que ayude a cualquiera que encuentre esta respuesta.

Creo que esto sería lo mejor como método de extensión, luego puedes llamarlo con yourString.FirstCharacterToLower ();

public static class StringExtensions { public static string FirstCharacterToLower(this string str) { if (String.IsNullOrEmpty(str) || Char.IsLower(str, 0)) { return str; } return Char.ToLowerInvariant(str[0]) + str.Substring(1); } }


Yo usaría esto:

Char.ToLowerInvariant(name[0]) + name.Substring(1)

Su primera solución no está optimizada: string.Format es lento y no lo necesita si tiene un formato que nunca cambiará.

El segundo es feo y no se puede mantener.