2

在处理最近的项目时一直困扰着我的事情;为什么 C# 没有将字符串更改为标题大小写的本机函数?

例如

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"

我们有.ToLowerand .ToUpper,我很感激您可以使用System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase或创建一个 TextInfo 对象(相同的过程),但它实在是太……丑陋了。

有人知道原因吗?

4

3 回答 3

2

实际上它有:TextInfo.ToTitleCase

为什么它在那里?因为套管取决于当前的文化。例如,土耳其文化对于“i”和“I”字符有不同的大写和小写。在此处阅读有关此内容的更多信息。

更新:实际上我同意@Cashley 的观点,他说课堂上缺少的ToTitleCase方法String看起来像是对微软的疏忽。如果您看一下,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我看不出有任何其他远离的理由。

于 2013-02-04T16:24:54.203 回答
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))

或者

  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));
于 2013-02-04T16:31:39.103 回答
0

这里有一个扩展方法,但它不是特定于文化的。

可能更好的实现只是像 String.ToUpper 一样包装 CurrentCulture.TextInfo:

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);
    }
}
于 2013-02-04T16:29:08.193 回答