将此作为测试:
string text1 = "Letter";
string text2 = "Number";
System.Console.Write("{0}" + " {0}" + " {0}", text1, " {0}", text2);
导致此输出:
Letter Letter Letter
这不应该是输出吗?
Letter Letter Letter Number
这样做:
System.Console.Write("{0}" + " {0}" + " {0}", text1, " {1}", text2);
也导致此输出:
Letter Letter Letter
答案 0 :(得分:6)
没有输出正确,只有提供给此Console.Write()方法重载的第一个文本值是可能包含占位符的格式。
您使用的实际格式为"{0}" + " {0}" + " {0}"
(有效评估为"{0} {0} {0}"
)。您的其余通话现在作为单独的参数提供:
text1
作为第一个参数,用于替换所有出现的{0}
" {0}"
作为第二个参数,用于替换{1}
text2
作为第三个参数,用于替换{2}
由于实际的格式文本只包含占位符{0}
,因此您将永远不会在结果文本中看到其他提供的参数。
答案 1 :(得分:3)
这将为您提供正确的输出:
System.Console.Write("{0} {0} {0} {1}", text1, text2);
您对函数和字符串格式的理解有几个问题。
{0}, {1}, etc..
" 0"
和text2
参数,因为它们未在原始字符串中引用。答案 2 :(得分:2)
以下是您的代码无效的原因说明:
首先,让我们分解你的行:
System.Console.Write("{0}" + " {0}" + " {0}", text1, " {0}", text2);
这一行将简化为:
System.Console.Write("{0} {0} {0}", text1, " {0}", text2);
请记住,第一个参数是要输出的字符串。在这种情况下"{0} {0} {0}"
。该字符串后面的任何参数都是要在原始字符串中替换的参数,例如{0}
或{1}
等。这些参数将在需要时使用。
System.Console.Write
,在您使用的上下文中需要一个字符串并搜索参数,例如{0}
和{1}
等。因为您只使用一个参数, {0}
,它只抓取字符串后的第一个参数,即text1
。之后的任何其他参数都被忽略,或者更具体地说,它们未被使用。所以编译器基本上简化了你的行:
System.Console.Write("{0}" + " {0}" + " {0}", text1);