C# 将字符串中单词的第一个字符大写

C# 将字符串中单词的第一个字符大写,c#,performance,C#,Performance,我想将我的字符串格式化为大写字符格式(即大写单词的第一个字符) *我的字符串最多有3个单词 在谷歌搜索之后,我找到了几种实现这种方法的方法,但我不知道哪种方法是最好的 方法一: string City = "NEW YORK CITY"; City = City.ToLower(); string Capatilize_City = ""; Capatilize_City = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToT

我想将我的字符串格式化为大写字符格式(即大写单词的第一个字符)

*我的字符串最多有3个单词

在谷歌搜索之后,我找到了几种实现这种方法的方法,但我不知道哪种方法是最好的

方法一:

string City = "NEW YORK CITY";
City = City.ToLower();
string Capatilize_City = "";
Capatilize_City = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(City);

方法二:

string City = "NEW YORK CITY";
string[] lstWord = City.ToLower().Split(' ');
string Capatilize_City = "";
foreach (string s in lstWord)
{
  string z = s.Substring(0, 1).ToUpper() + s.Substring(1, s.Length - 1);
  Capatilize_City += " " + z;
}
Capatilize_City = Capatilize_City.Trim();


哪种代码最适合使用(性能和速度相反)?

您应该考虑代码大小、可读性、可理解性和可维护性,因此明显的赢家是


编辑

所以我提议

Capatilize_City =
  System.Globalization.CultureInfo.CurrentCulture.TextInfo
      .ToTitleCase(City.ToLower());

这一班轮也适用于:

string Capatilize_City =
    String.Join(
        " ",
        City
            .ToLower()
            .Split(' ')
            .Select(s =>
                s.Substring(0, 1).ToUpper()
                + s.Substring(1, s.Length - 1)));
除非您在大量字符串上执行此操作,否则对于任何方法来说,性能都不应该是一个问题


我建议您在字符串上创建一个名为
.ToTitleCase()
的扩展方法,并使用它-然后如果您需要更改实现,您可以在代码中的一个位置执行它。

您的第二个方法有很多分配,所以我猜它会更慢。探查器可以为您提供要告诉的数据。请尽量避免手动。使用方法1。它可读性强,篇幅短,要知道哪个更快,唯一的办法就是测试它们。很有可能,两种方法都足够快,在这种情况下,使用更简单的方法。除非您试图将案例命名为“战争与和平”副本,否则任何一种方法都不会影响性能。因此,在上述情况下,第一种方法是最好的?是的,我认为在我的回答中使用标准这是非常明显的为什么有人会使用它而不是现有的ToTitleCase()?我不会使用它,除非OP提出了语义等价的方法。我只是提供了一个“更干净”的方法来接近他的方法。此外,OP可能希望涵盖一些特殊情况(请原谅双关语),例如首字母缩略词问题,而现有的
ToTitleCase()
可能对OP不起作用。否则他为什么会提出这个问题?
string Capatilize_City =
    String.Join(
        " ",
        City
            .ToLower()
            .Split(' ')
            .Select(s =>
                s.Substring(0, 1).ToUpper()
                + s.Substring(1, s.Length - 1)));