为什么没有本地字符串方法来更改字符串标题大小写?

时间:2013-02-04 16:23:16

标签: c# string function

在最近的一个项目上工作时一直困扰着我的东西;为什么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对象(相同的过程),但它只是......丑陋。

有人知道原因吗?

3 个答案:

答案 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));