在最近的一个项目上工作时一直困扰着我的东西;为什么C#没有将字符串更改为标题大小写的本机函数?
e.g。
string x = "hello world! THiS IS a Test mESSAGE";
string y = x.ToTitle(); // y now has value of "Hello World! This Is A Test Message"
我们有.ToLower
和.ToUpper
,我感谢您可以使用System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase
或创建一个TextInfo对象(相同的过程),但它只是......丑陋。
有人知道原因吗?
答案 0 :(得分:2)
实际上它有:TextInfo.ToTitleCase
为什么会这样?因为套管取决于当前的文化。例如。土耳其文化对于'i'和'I'字符有不同的大写和小写。详细了解此here。
更新:实际上我同意@Cashley的观点,即ToTitleCase
课上缺少String
方法看起来像是对MicroSoft的疏忽。如果您要查看String.ToUpper()
或String.ToLower()
,您会发现两者都在内部使用TextInfo
:
public string ToUpper()
{
return this.ToUpper(CultureInfo.CurrentCulture);
}
public string ToUpper(CultureInfo culture)
{
if (culture == null)
throw new ArgumentNullException("culture");
return culture.TextInfo.ToUpper(this);
}
所以,我认为ToTitleCase()
应该采用相同的方法。也许.NET团队决定只向那些主要使用的方法添加String
类。我没有看到任何其他理由让ToTitleCase
离开。
答案 1 :(得分:0)
There's an extension method就此而言,但这不是特定于文化的。
可能更好的实现只包装CurrentCulture.TextInfo,如String.ToUpper:
class Program
{
static void Main(string[] args)
{
string s = "test Title cAsE";
s = s.ToTitleCase();
Console.Write(s);
}
}
public static class StringExtensions
{
public static string ToTitleCase(this string inputString)
{
return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(inputString);
}
public static string ToTitleCase(this string inputString, CultureInfo ci)
{
return ci.TextInfo.ToTitleCase(inputString);
}
}
答案 2 :(得分:0)
Dim myString As String = "wAr aNd pEaCe"
' Creates a TextInfo based on the "en-US" culture.
Dim myTI As TextInfo = New CultureInfo("en-US", False).TextInfo
' Changes a string to titlecase.
Console.WriteLine("""{0}"" to titlecase: {1}", myString, myTI.ToTitleCase(myString))
OR
string myString = "wAr aNd pEaCe";
// Creates a TextInfo based on the "en-US" culture.
TextInfo myTI = new CultureInfo("en-US", false).TextInfo;
// Changes a string to titlecase.
Console.WriteLine("\"{0}\" to titlecase: {1}", myString, myTI.ToTitleCase(myString));