代码之家  ›  专栏  ›  技术社区  ›  Gerrie Schenck

对简单的事情使用string.Format?

  •  4
  • Gerrie Schenck  · 技术社区  · 16 年前

    日期为2002年2月2日的客户订单234和付款id 55543有问题。

    Console.WriteLine(string.Format("\t\t{0}", myString));
    

    这上面有没有可能的开销?也许我应该用普通的 + 操作员要做这些简单的操作吗?

    7 回复  |  直到 16 年前
        1
  •  5
  •   Ahmad Mageed    16 年前

    对于简单的字符串连接,请使用 + 方法对于不需要格式的简单事物,它更清晰。

    对于具有特定格式的更复杂的字符串,如果保留整个字符串的结构并为输入提供占位符很有用,请使用 String.Format .

    是的,有一个头顶。 字符串格式 在封面下使用StringBuilder。在这些场景中,简单的字符串串联会快得多。关于这个主题的一些基准测试和博客文章可以很容易地找到。当然,这完全取决于你的使用。如果循环中出现小字符串concats,则重复使用 字符串格式 + 康卡特。如果你正在建立一个 然后经典的例子是 StringBuilder 关于concat和StringBuilder的相关问题可以在SO上找到。

    String.Format("{0}{1}", a, b) 因为没有太多的格式。很简单 a + b . 不幸的是,我在生产代码中遇到过这样的例子,当我看到String.Format时,我希望看到一些需要以某种方式构造的东西,而不是一个简单的concat。

    "(" + area + ") " + number + " x" + extension -事情太多了,不容易修改。在这种情况下,最好使用String.Format: String.Format("({0}) {1} x{2}", area, number, extension) . 这仍然是一个微不足道的例子,但你得到的想法。

        2
  •  2
  •   GaryDevenay    16 年前

    扩展

    string value = string.Format("Hello {0}", user.username);
    

    它的可读性和可扩展性比

    string value = "Hello" + user.username
    

    例如,如果您想将上次登录日期添加为系统升级,您可以简单地将代码扩展为

    string value = string.Format("Hello {0}, you last logged in {1}", user.username, user.lastLogin);
    
        3
  •  2
  •   Justin Niessner    16 年前

    简单的连接对于简单的事情更有效。使用 String.Format() 当事情变得更复杂时,它会让你的代码更容易阅读。

    我个人也会做同样的事情(只要我调用的函数不能为我处理格式)。


    对于常规字符串串联,如 "Hello " + "World!"; 我会使用StringBuilder。您的示例通过准备两个选项卡来格式化输出字符串,我认为这更像格式化。

    格式化和连接是有区别的…小心你用什么来连接。


    String.Format()

    你可能想改变你的例子 Console.WriteLine() String.Format()

    Console.WriteLine("\t\t{0}", myString);
    

        4
  •  1
  •   Kelsey    16 年前

    我的规则是如果我必须使用 + (串联)我不止一次把它改成 string.Format .

    string a = "Something: " + x;   // ok
    
    string b = "Something: " + x + " something else"; // change it to a string.Format
    string bB = string.Format("Something: {0} something else", x); // much nicer to read
    
    string c = "Something: " + x + " " + y + " " + z;  // Yuck
    string cC = string.Format("Something: {0} {1} {2}", x, y, x);  // Much nicer
    
        5
  •  0
  •   brianary    16 年前

    我不知道性能如何,有人可能会提供这些数据,但我的感觉是字符串。如果您想将格式字符串放入配置文件(或数据库字段或资源文件或其他文件)中,格式就是一种方法。这样,如果你想调整标签的数量,切换到空格,添加分隔符,或者别的什么,你就不需要重新编译了。

        6
  •  0
  •   João Angelo    16 年前

    我倾向于使用 String.Concat 而不是 String.Format Concat 然后使用 + 如果您已经在使用 字符串格式 只需切换一次按键即可。

    IIRC公司 字符串。Concat .

        7
  •  0
  •   Craig Gidney Mihai    16 年前

    我几乎总是使用format,尽管我使用扩展方法而不是静态字符串方法。我发现它更容易理解,更容易改变,而且通常更容易维护。它还可以使本地化更容易,因为它不像串联那样引入排序问题。

    "You have {0} widgets.".Frmt(widgetCount)
    "You have " + widgetCount.ToString() + " widgets."