使用{0}
和+
之间是否存在任何差异,因为他们在屏幕上打印 length 的工作相同:
Console.WriteLine("Length={0}", length);
Console.WriteLine("Length=" + length);
答案 0 :(得分:30)
在你琐碎的例子中没有区别。但是有很好的理由喜欢格式化的({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}'"
这些选择可以在以后由英语专业人士制作,无需更改代码。
您还可以将这些资源翻译成其他语言,再次而不更改代码。
立即开始使用格式化字符串;当你需要编写适当使用字符串资源的可本地化软件时,你已经习惯了。
答案 1 :(得分:2)
第二行将创建一个字符串并打印出该字符串。 第一行将使用composite formatting,如string.Format。
Here是使用复合格式的一些很好的理由。
答案 2 :(得分:1)
有区别。
例如:
Console.WriteLine("the length is {0} which is the length", length);
Console.WriteLine("the length is "+length+" which is the length");
+
连接两个字符串,{0}
是一个占位符,用于插入字符串。
答案 3 :(得分: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);
它提供易于阅读的界面,易于格式化
答案 4 :(得分:0)
{n}
其中n >= 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);