C# 为什么在MsgBox中写入时不能使用{0}?

C# 为什么在MsgBox中写入时不能使用{0}?,c#,C#,如果我想在控制台中显示一些东西,我通常这样写:控制台.write(“Hello{0}”,AnyNumber) 但是如果我使用Interaction.MsgBox并编写Interaction.MsgBox(“Hello{0},AnyNumber”)我收到一个错误,为什么 在编写时,我喜欢使用像{0}这样的占位符,而不是+(字符串连接),我认为这样写更容易 所以我的问题是:为什么我不能在MsgBox中使用占位符,还有其他方法使用它们吗 以下是我希望在MsgBox中使用它的示例: static voi

如果我想在
控制台中显示一些东西,我通常这样写:
控制台.write(“Hello{0}”,AnyNumber)

但是如果我使用
Interaction.MsgBox
并编写
Interaction.MsgBox(“Hello{0},AnyNumber”)我收到一个错误,为什么

在编写时,我喜欢使用像
{0}
这样的占位符,而不是
+
(字符串连接),我认为这样写更容易

所以我的问题是:为什么我不能在MsgBox中使用占位符,还有其他方法使用它们吗

以下是我希望在MsgBox中使用它的示例:

static void multiplikation(int tal1, int tal2)
{        
    if (tal1*tal2 == 100)
    {
          Interaction.MsgBox("Hello!\nResult:\n" + (tal1 * tal2));
    }
    else
    {
          Interaction.MsgBox("Resultat:\n" + (tal1 * tal2));
    }
}
static void addition(int tal1, int tal2)
{
    if (tal1 + tal2 == 100)
    {
         Console.Write("Hello!\nResult:{0}\n", (tal1 + tal2));
    }
    else
    {
         Console.Write("Resultat:{0}\n", (tal1 + tal2));
    }
}

Interaction.MsgBox
接收字符串作为其第一个参数。如果要格式化字符串,必须自己格式化,并将格式化后的字符串传递给
Interaction.MsgBox

Interaction.MsgBox(string.Format("Hello!\nResult:{0}\n", (tal1 + tal2)));

另一方面,
Console.Write
使用重载编写,允许在
控制台内执行格式化。Write
交互。MsgBox
接收字符串作为其第一个参数。如果要格式化字符串,必须自己格式化,并将格式化后的字符串传递给
Interaction.MsgBox

Interaction.MsgBox(string.Format("Hello!\nResult:{0}\n", (tal1 + tal2)));

另一方面,,
Console.Write
使用重载编写,允许在
控制台内执行格式化。Write
您可以使用string format方法您可以使用string format方法
控制台。WriteLine
具有支持
string.format
类型实现的重载


正如评论中指出的,您需要使用
string.Format()
来复制
交互的行为。MsgBox
控制台。WriteLine
具有支持
string.Format
类型实现的重载


正如评论中指出的,您需要使用
string.Format()
交互复制该行为。MsgBox

这是因为与
控制台.Write
交互不同,
交互。MsgBox
string.Format
一无所知:它只是按原样显示字符串


由于C#version 6,有一种舒适的方式:

 Interaction.MsgBox($"Result:\n {tal1 * tal2}");
“$”告诉编译器将
{tal1*tal2}
视为一个表达式,并将结果插入字符串中。有关这种所谓的字符串插值的更多详细信息:

使用字符串插值,大括号
{}
中的表达式可以 也需要进行评估。结果将插入到相应的 字符串中的位置。例如,要计算
foo
bar
并将其插入,在卷发中使用
Math.Max
支撑: 这可以按如下方式使用:

    var tal1=1; var tal2=2;
    MsgBox("Hello!\nResult:{0}\n", (tal1 + tal2));
注意:此解决方案不仅支持
{0}
,而且还支持
{1}、{2}、
,因为我使用了params数组。因此,以下措施也在发挥作用:

MsgBox("Calculation: {0} + {1} = {2}", tal1, tal2, (tal1+tal2));
输出
计算:1+2=3

您可以阅读更多有关
Interaction.MsgBox
方法、如何更改messagebox的样式(例如,如何显示Yes/No/Cancel按钮以及返回的
MsgBoxResult
值)的信息,以便根据需要对其进行调整


这是完整的程序,您可以在或Visual Studio中运行它:

    static void Main(string[] args)
    {
            var tal1=1; var tal2=2;
            MsgBox("Hello!\nResult:{0}\n", (tal1 + tal2));
            MsgBox("Calculation: {0} + {1} = {2}", tal1, tal2, (tal1+tal2));
    }

    public static MsgBoxResult MsgBox(string msg, params object[] p)
    {
        var fmt=string.Format(msg, p);
        var msgStyle= Microsoft.VisualBasic.MsgBoxStyle.OkOnly;
        return Interaction.MsgBox(fmt, msgStyle, "Information");
    }

不要忘记添加对
Microsoft.VisualBasic.dll
的引用,使用命名空间
Microsoft.VisualBasic
,以运行此示例


如果您使用的是LinqPad,请右键单击,选择“查询属性…”,然后在“其他引用”中添加dll,并在“其他命名空间导入”中添加命名空间。这是因为与
控制台.Write不同,
Interaction.Msgbox
不知道有关
string.Format
的任何信息:它只是按原样显示字符串


由于C#version 6,有一种舒适的方式:

 Interaction.MsgBox($"Result:\n {tal1 * tal2}");
“$”告诉编译器将
{tal1*tal2}
视为一个表达式,并将结果插入字符串中。有关这种所谓的字符串插值的更多详细信息:

使用字符串插值,大括号
{}
中的表达式可以 也需要进行评估。结果将插入到相应的 字符串中的位置。例如,要计算
foo
bar
并将其插入,在卷发中使用
Math.Max
支撑: 这可以按如下方式使用:

    var tal1=1; var tal2=2;
    MsgBox("Hello!\nResult:{0}\n", (tal1 + tal2));
注意:此解决方案不仅支持
{0}
,而且还支持
{1}、{2}、
,因为我使用了params数组。因此,以下措施也在发挥作用:

MsgBox("Calculation: {0} + {1} = {2}", tal1, tal2, (tal1+tal2));
输出
计算:1+2=3

您可以阅读更多有关
Interaction.MsgBox
方法、如何更改messagebox的样式(例如,如何显示Yes/No/Cancel按钮以及返回的
MsgBoxResult
值)的信息,以便根据需要对其进行调整


这是完整的程序,您可以在或Visual Studio中运行它:

    static void Main(string[] args)
    {
            var tal1=1; var tal2=2;
            MsgBox("Hello!\nResult:{0}\n", (tal1 + tal2));
            MsgBox("Calculation: {0} + {1} = {2}", tal1, tal2, (tal1+tal2));
    }

    public static MsgBoxResult MsgBox(string msg, params object[] p)
    {
        var fmt=string.Format(msg, p);
        var msgStyle= Microsoft.VisualBasic.MsgBoxStyle.OkOnly;
        return Interaction.MsgBox(fmt, msgStyle, "Information");
    }

不要忘记添加对
Microsoft.VisualBasic.dll
的引用,使用命名空间
Microsoft.VisualBasic
,以运行此示例


如果您使用的是LinqPad,请右键单击,选择“查询属性…”,然后在“其他引用”中添加dll,在“其他命名空间导入”中添加命名空间;使用@MichaelB所说的String.Format,或者添加您自己的扩展方法,比如使用String的MsgBoxf。Format@Kenny:我提供了这样的解决方案。使用String.Format(“Hello{0}”,“user”);使用@MichaelB所说的String.Format,或者添加您自己的扩展方法,比如使用String的MsgBoxf。Format@Kenny当前位置我已经提供了这样的解决方案。