为什么我不能写MessageBox.Show(“asdfasdf {0}”,i);?

时间:2011-11-10 08:19:28

标签: c# windows

int i = 85; 
Console.WriteLine("My intelligence quotient is {0}", i);  // Kosher
MessageBox.Show("My intelligence quotient is {0}", i); // Not Kosher

我发现这最令人痛苦的是让人衰弱。一个工作,而不是另一个?这种行为不协调的根源是什么?我想的越多,我的想象就越少,而且经常无法理解会变成自我厌恶。

6 个答案:

答案 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.WriteLineDebug.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);
        }
    }