我想有一个方法将字符串的第一个字符转换为小写.
我的方法:
1.
public static string ReplaceFirstCharacterToLowerVariant(string name)
{
return String.Format("{0}{1}", name.First().ToString().ToLowerInvariant(), name.Substring(1));
}
Run Code Online (Sandbox Code Playgroud)
2.
public static IEnumerable<char> FirstLetterToLowerCase(string value)
{
var firstChar = (byte)value.First();
return string.Format("{0}{1}", (char)(firstChar + 32), value.Substring(1));
}
Run Code Online (Sandbox Code Playgroud)
你的方法是什么?
ono*_*nof 228
我会使用简单的连接:
Char.ToLowerInvariant(name[0]) + name.Substring(1)
Run Code Online (Sandbox Code Playgroud)
第一个解决方案没有优化,因为string.Format速度很慢,如果您的格式永远不会改变,则不需要它.它还会生成一个额外的字符串以将字母转换为小写,这是不需要的.
"+ 32"的方法很难/不可维护,因为它需要知道ASCII字符值偏移.它还会生成带有Unicode数据和ASCII符号字符的错误输出.
Tho*_*rin 60
根据具体情况,可能需要一些防御性的编程:
public static string FirstCharacterToLower(string str)
{
if (String.IsNullOrEmpty(str) || Char.IsLower(str, 0))
return str;
return Char.ToLowerInvariant(str[0]) + str.Substring(1);
}
Run Code Online (Sandbox Code Playgroud)
该if语句还可以防止生成新字符串,如果它不会被改变的话.您可能希望该方法在null输入上失败,并抛出一个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);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我知道不滥用 c# 的最快解决方案:
public static string LowerCaseFirstLetter(string value)
{
if (value?.Length > 0)
{
var letters = value.ToCharArray();
letters[0] = char.ToLowerInvariant(letters[0]);
return new string(letters);
}
return value;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
使用范围运算符 C# 8.0 或更高版本,您可以执行以下操作:
Char.ToLowerInvariant(name[0]) + name[1..];
Run Code Online (Sandbox Code Playgroud)