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?
char.ToLower(name[0]).ToString() + name.Substring(1)
+
opérateur est lent lorsque vous concaténez beaucoup de chaînes. Dans ce casStringBuilder
, les performances seraient bien meilleures. Cependant,+
c'est beaucoup plus rapide questring.Format
. Utilisez ce dernier lorsque vous avez réellement besoin de formater quelque chose (comme afficher des entiers, des doubles ou des dates).+
opérateur n'est pas du tout lent, car le compilateur le transforme en unString.Concat
(cependantString.Join
est plus rapide queString.Concat
pour une raison idiote).public static string ToLowerFirst(this string source) { if (string.IsNullOrWhiteSpace(source)) return source; var charArray = source.ToCharArray(); charArray[0] = char.ToLower(charArray[0]); return new string(charArray); }
basée sur le commentaire de @ MatteoMigliore.Selon la situation, une petite programmation défensive pourrait être souhaitable:
L'
if
instruction empêche également une nouvelle chaîne d'être construite si elle ne va pas être modifiée de toute façon. Vous voudrez peut-être que la méthode échoue sur une entrée nulle à la place et lance unArgumentNullException
.Comme les gens l'ont mentionné, utiliser
String.Format
pour cela est excessif.la source
Juste au cas où cela aiderait quiconque tomberait sur cette réponse.
Je pense que ce serait mieux comme méthode d'extension, alors vous pouvez l'appeler avec yourString.FirstCharacterToLower ();
la source
Le mien est
la source
val.Remove
? Cela me semble un peu contre-intuitif.J'aime la réponse acceptée, mais à côté de la vérification,
string.IsNullOrEmpty
je vérifierais également siChar.IsLower(name[1])
vous avez affaire à une abréviation. Par exemple, vous ne voudriez pas que le «sida» devienne «sida».la source
La solution la plus rapide que je connaisse sans abuser de c #:
la source
Combiné quelques-uns et en a fait une extension chaînable. Ajout d'un court-circuit sur les espaces et les non-lettres.
la source
C'est une petite méthode d'extension utilisant la dernière syntaxe et les validations correctes
la source
Utilisez ceci:
la source
Il est préférable d'utiliser
String.Concat
queString.Format
si vous savez que le format n'est pas une modification des données et qu'une concaténation est souhaitée.la source