BestPractice – 将string的首字符转换为小写字母

我想有一个方法,将string的第一个字符转换为小写。

我的方法:

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

你会怎么做?

我会用这个:

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

你的第一个解决scheme没有被优化:string.Format很慢,如果你有一个永远不会改变的格式,你不需要它。

其次是丑陋,不可维护。

根据情况,可能需要一些防御性的节目:

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

if语句还可以防止一个新的string被build立,如果它不会被改变的话。 您可能希望让方法在空input上失败,并抛出一个ArgumentNullException

正如人们已经提到的,使用String.Format这是矫枉过正的。

以防万一遇到这个问题偶然发生。

我认为这将是最好的扩展方法,那么你可以调用它与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); } } 

我的是

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

我喜欢接受的答案,但旁边检查string.IsNullOrEmpty我也会检查如果Char.IsLower(name[1]) ,以防你处理缩写。 例如,你不希望“艾滋病”成为“艾滋病”。

如果您知道格式不是更改数据,那么最好使用String.Concat而不是String.Format,并且只需要连接。