157 votes

BestPractice - Transforme le premier caractère d'une chaîne en minuscules

J'aimerais avoir une méthode qui transforme le premier caractère d'une chaîne en minuscules.

Mes approches

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));
}
 

Quelle serait votre approche?

263voto

onof Points 9477

Je voudrais utiliser ceci:

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

Votre première solution n'est pas optimisée: string.Format est lent et vous n'en avez pas besoin si vous avez un format qui ne changera jamais.

La seconde est moche et non maintenable.

72voto

Thorarin Points 21538

Selon la situation, un peu de programmation défensive peut être souhaitable:

 public static string FirstCharacterToLower(string str)
{
    if (String.IsNullOrEmpty(str) || Char.IsLower(str, 0))
        return str;

    return Char.ToLowerInvariant(str[0]).ToString() + str.Substring(1);
}
 

L'instruction if empêche également la création d'une nouvelle chaîne si elle ne doit pas être modifiée de toute façon. Vous voudrez peut-être que la méthode échoue avec une entrée nulle et jette un ArgumentNullException .

Comme les gens l'ont mentionné, utiliser String.Format pour cela est excessif.

3voto

fedotoves Points 563

Le mien est

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

2voto

SlowBow Points 51

J'aime la réponse acceptée, mais en plus de vérifier string.IsNullOrEmpty, je voudrais également vérifier si Char.IsLower (name [1]) au cas où vous auriez affaire à une abréviation. Par exemple, vous ne voudriez pas que le "SIDA" devienne "le SIDA".

-3voto

Konstantin Isaev Points 167

Il est préférable d'utiliser String.Concat que String.Format si vous savez que le format n'est pas une donnée de modification, et qu'une concaténation est souhaitée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X