.NET Standard 2.0添加了TextInfo.ToTitleCase(source),因此您可以在.NET Core 2.0中使用它。
但是,对于.NET Core 1.x支持,你运气不好。
您可以实现自己的扩展方法:
public static class StringHelper
{
public static string ToTitleCase(this string str)
{
var tokens = str.Split(new[] { " ", "-" }, StringSplitOptions.RemoveEmptyEntries);
for (var i = 0; i < tokens.Length; i++)
{
var token = tokens[i];
tokens[i] = token == token.ToUpper()
? token
: token.Substring(0, 1).ToUpper() + token.Substring(1).ToLower();
}
return string.Join(" ", tokens);
}
}
信用:从这个qazxsw poi *公然抄袭。
*添加了缩写gist的位。
似乎.NET Core中没有内置的这种方法。
不幸的是,仍然在2016年10月,.NET Core没有为我们提供Dotnet Fiddle方法。
我自己创造了一个适合我自己需要的东西。您可以通过将自己的分隔符添加到正则表达式来进行调整。将ToTitleCase
替换为适用于您的_cultureInfo
实例。
CultureInfo
我为测试扩展创建了一个public static class TextHelper
{
private static readonly CultureInfo _cultureInfo = CultureInfo.InvariantCulture;
public static string ToTitleCase(this string str)
{
var tokens = Regex.Split(_cultureInfo.TextInfo.ToLower(str), "([ -])");
for (var i = 0; i < tokens.Length; i++)
{
if (!Regex.IsMatch(tokens[i], "^[ -]$"))
{
tokens[i] = $"{_cultureInfo.TextInfo.ToUpper(tokens[i].Substring(0, 1))}{tokens[i].Substring(1)}";
}
}
return string.Join("", tokens);
}
}
,并且包含了本文中其他解决方案的github。您必须取消对线路的注释才能看到其他解决方案输出的内容。此解决方案涵盖了所有想到的场景。您可以在git或小提琴的测试中验证这些。如果你想在非.NET Core中获得与TextInfo.ToTitleCase相似的输出,我建议你使用这个解决方案。
dotnet fiddle