10

{0}使用和之间有什么区别吗,+因为它们都在做同样的工作,在屏幕上打印长度:

Console.WriteLine("Length={0}", length);
Console.WriteLine("Length="   + length);
4

5 回答 5

30

在您的简单示例中,没有区别。但是有很好的理由更喜欢 formatted ( {0}) 选项:它使国际软件的本地化变得非常容易,并且它使第三方编辑现有字符串变得更加容易。

例如,假设您正在编写一个产生此错误消息的编译器:

"Cannot implicitly convert type 'int' to 'short'"

你真的要写代码吗

Console.WriteLine("Cannot implicitly convert type '" + sourceType + "' to '" + targetType + "'");

? 天哪,没有。您想将此字符串放入资源中:

"Cannot implicitly convert type '{0}' to '{1}'"

然后写

Console.WriteLine(FormatError(Resources.NoImplicitConversion, sourceType, targetType));

因为那时您可以自由决定是否要将其更改为:

"Cannot implicitly convert from an expression of type '{0}' to the type '{1}'"

或者

"Conversion to '{1}' is not legal with a source expression of type '{0}'"

这些选择可以稍后由英语专业的学生做出,而无需更改代码。

您还可以将这些资源翻译成其他语言,同样无需更改代码

现在开始总是使用格式化字符串;当您需要编写正确使用字符串资源的可本地化软件时,您已经习惯了。

于 2013-05-03T20:54:10.350 回答
2

第二行将创建一个字符串并将该字符串打印出来。第一行将使用复合格式,如 string.Format。

以下是使用复合格式的一些充分理由。

于 2013-05-03T20:33:19.627 回答
1

它们是有区别的。

前任:

Console.WriteLine("the length is {0} which is the length", length);
Console.WriteLine("the length is "+length+" which is the length");

+连接两个字符串,{0}是要插入的字符串的占位符。

于 2013-05-03T20:30:37.643 回答
1

{n}是一个占位符,可以与多个选项一起使用。 其中 n 是一个数字

在您的示例中,它会有所不同,最终结果将相同,即两个字符串的连接。但是在类似的东西

var firstName = "babba";
var lastName ="abba";
var dataOfBirth = new Date();

Console
   .Write(" Person First Name : {0} | Last Name {1} }| Last Login : {2:d/M/yyyy HH:mm:ss}", 
          firstName, 
          secondName, 
          dateOfBirth);

它提供了一个易于阅读的界面,易于格式化

于 2013-05-03T20:37:11.053 回答
0

{n}wheren >= 0允许您按字符串中出现的顺序替换值。

string demo = "demo", example = "example";
Console.WriteLine("This is a {0} string used as an {1}", demo, example);

+允许您将两个或多个字符串连接在一起。

Console.WriteLine("This is a " + demo + " string used as an " + example);
于 2013-05-03T20:31:16.563 回答