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,并且只需要连接。