int i = 85;
Console.WriteLine("My intelligence quotient is {0}", i); // Kosher
MessageBox.Show("My intelligence quotient is {0}", i); // Not Kosher
我发现这最令人痛苦的是让人衰弱。一个工作,而不是另一个?这种行为不协调的根源是什么?我想的越多,我的想象就越少,而且经常无法理解会变成自我厌恶。
答案 0 :(得分:9)
Show()
方法没有适当的过载。
为方便起见,它被添加到Console.WriteLine
,但它不是每个.NET方法的组成部分。
要达到同样的效果,请手动使用string.Format
:
MessageBox.Show(string.Format("asdfasdf{0}", i)); // Kosher
答案 1 :(得分:3)
Console.Writeline
有这些重载:
特别是,an overload接受格式字符串和params array。
这是另一种非常相似的方法:
我不知道为什么MessageBox.Show没有超负荷。我猜这是因为该方法已经有很多其他重载。
但是你可以通过添加string.Format
来获得类似的效果:
public void ShowMessageBox(string format, params object[] args)
{
MessageBox.Show(string.Format(format, args));
}
// ...
ShowMessageBox("You entered: {0}", someValue);
答案 2 :(得分:1)
为什么很难说(这只是MS如何定义它)但是如果你想为这两种情况编写“全等”代码,那么你可以使用string.Format
- 例如像这样:
< / p>
MessageBox.Show (string.Format ("asdfasdf{0}", i));
或
Console.WriteLine (string.Format ("asdfasdf{0}", i)); // although this is unneccesary!
答案 3 :(得分:0)
WriteLine()
方法已超载WriteLine(string format, Object arg0)且MessageBox.Show()
没有此类重载。相反,你需要使用:
MessageBox.Show(string.Format("asdfasdf{0}", i));
答案 4 :(得分:0)
Console.WriteLine
,Debug.Print
等是打算接受字符串将其写入特定位置的方法。 MessageBox.Show
是一种向用户显示消息框模式的方法。设置的选项有很多(比如标题,按钮等),所以在这一点上接受格式化逻辑是没有意义的。
HTH
答案 5 :(得分:0)
或者如果它对你来说如此重要,你可以创建你自己的类,并用于你已经问过的目的:
class myMessageBox
{
private myMessageBox()
{ }
public static void Show(string text,params object[] i)
{
text = String.Format(text, i);
MessageBox.Show(text);
}
}