有没有办法在MessageBox.Show()中有一个if语句

时间:2016-02-11 15:21:58

标签: c# winforms

继承我的代码:

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

5 个答案:

答案 0 :(得分:7)

它与MessageBox.Show无关。基本上在这个操作中你只是构建一个字符串:

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

如果您想有条件地在其中包含字符串,则可以使用the ternary operator。像这样:

"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()并创建单个格式化字符串,使用上面的内联条件来根据需要添加字符串(或空字符串)。这可能是性能最佳的选项。

答案 1 :(得分:4)

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中,您还可以使用String interpolation

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

答案 2 :(得分:1)

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);

您可以使用conditional operator代替。但我更喜欢上面的方法。

答案 3 :(得分:1)

虽然你可以使用字符串插值和条件表达式将额外的文本放入消息中,但最好在调用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);

答案 4 :(得分:0)

这应该有效:

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));