有没有可能的方法可以在 MessageBox.Show() 中使用 if 语句

本文关键字:语句 if Show MessageBox 有可能 方法 | 更新日期: 2023-09-27 18:34:16

这是我的代码:

MessageBox.Show("numberOfTransactions: " 
                + transactionLabel.Text 
                + Environment.NewLine 
                + Environment.NewLine 
                + if(numberHpLaptops > 0)
                  {
                    "The number of laptops that you have bought is: " 
                        + numberHpLaptops};

有没有可能的方法可以在 MessageBox.Show() 中使用 if 语句

它与MessageBox.Show无关。 本质上,在此操作中,您只是在构建一个字符串:

"some string" + "another string" + "a third string"

如果要有条件地包含字符串作为其中的一部分,可以使用三元运算符。 像这样:

"some string" + (someCondition ? "another string" : "") + "a third string"

这基本上意味着"如果某个条件为真,则导致第一个选项,否则,导致第二个选项"。 只要整个运算符(为清楚起见,此处括在括号中(以原子方式产生正确的类型,就可以在任何此类操作中内联使用。

<小时 />

注意:还有其他方法可以执行此操作。 正如在对该问题的评论中提到的,StringBuilder可能非常有用。 例如:

var myString = new StringBuilder();
myString.Append("some string");
if (someCondition)
    myString.Append("another string");
myString.Append("a third string");
MessageBox.Show(myString.ToString());

两者之间的性能略有不同,如果这在您的情况下很重要。 但是,可读性非常不同。 虽然主观,但随着代码复杂性的变化,这种事情可能非常重要。

如果性能是一个问题,您还可以使用 string.Format() 并创建单个格式化字符串,使用上述内联条件根据需要添加字符串(或空字符串(。 这可能是性能最高的选项。

MessageBox.Show("numberOfTransactions: " 
            + transactionLabel.Text 
            + Environment.NewLine 
            + Environment.NewLine 
            + (numberHpLaptops > 0 
                     ? ("The number of laptops that you have bought is: " + numberHpLaptops) 
                     : string.Empty));

在 C# 6 中,还可以使用字符串内插:

MessageBox.Show($"numberOfTransactions: {transactionLabel.Text}{Environment.NewLine}{Environment.NewLine}{numberHpLaptops > 0 ? "The number of laptops that you have bought is: " + numberHpLaptops : string.Empty}");

尽管您可以将字符串内插与条件表达式一起使用以将额外的文本放入消息中,但最好在调用 MessageBox.Show 之外准备消息:

var message = $"numberOfTransactions: {transactionLabel.Text}";
if (numberHpLaptops > 0) {
    message += $"{Environment.NewLine}{Environment.NewLine}The number of laptops that you have bought is: {numberHpLaptops}";
}
MessageBox.Show(message);

String.Format可以帮助提高可读性和可测试性:

string laptopsMsg = "";
if(numberHpLaptops > 0)
    laptopsMsg = "The number of laptops that you have bought is: " + numberHpLaptops.ToString();
string msg = String.Format("numberOfTransactions: {0}{1}{1}{2}"
    , transactionLabel.Text
    , Environment.NewLine
    , laptopsMsg);
MessageBox.Show(msg);

您可以改用条件运算符。但我更喜欢上面的方法。

这应该有效:

MessageBox.Show( string.Format("numberOfTransactions: {0}{1}{1}{2}",
    transactionLabel.Text , Environment.NewLine, (numberHpLaptops > 0) 
        ? string.Format("The number of laptops that you have bought is: {0}", numberHpLaptops)
        : string.Empty));