Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有可能在MessageBox.Show()中使用if语句_C#_Winforms - Fatal编程技术网

C# 有没有可能在MessageBox.Show()中使用if语句

C# 有没有可能在MessageBox.Show()中使用if语句,c#,winforms,C#,Winforms,这是我的密码: MessageBox.Show("numberOfTransactions: " + transactionLabel.Text + Environment.NewLine + Environment.NewLine + if(numberHpLaptops > 0) {

这是我的密码:

MessageBox.Show("numberOfTransactions: " 
                + transactionLabel.Text 
                + Environment.NewLine 
                + Environment.NewLine 
                + if(numberHpLaptops > 0)
                  {
                    "The number of laptops that you have bought is: " 
                        + numberHpLaptops};
在中,您还可以使用:


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

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

你可以用这个来代替。但是我更喜欢上面的方法。

尽管可以使用带条件表达式的字符串插值将额外文本放入消息中,但最好在调用
消息框之外准备消息。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);
这应该起作用:

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

是的,使用StringBuilder…
if
不是一个函数,并且没有返回值,因此您不能执行
blah+if()+blah
。@AdrianoRepetti StringBuilder对于常量参数(子串)来说是开销。@VadimMartynov开销?您不会注意到任何性能改进(即使它更快,并且不会分配多个中间结果),但优点是使代码可读。看看瓦迪姆的答案,你就会明白我的意思了。请注意,这里您将使用AppendFormat()和AppendLine()而不是普通的Append(),并且它支持流畅的语法-以防一行代码爱好者想要这样做。谢谢,我忘记了立即If!StringBuilder对于常数数量的参数(子字符串)来说是开销过大的,在这种情况下可能是最糟糕的解决方案。@VadimMartynov:可能吧,但这也归结为系统中性能与可读性的需要。有时候,如果代码更容易支持,那么做一些稍微慢一点的事情是很有意义的。(例如,并发用户很少的业务关键型系统。)@VadimMartynov还注意到,使用多个“+”将创建多个中间结果。如前所述……这不是一件遗憾的事,但没有任何好处。还有String.Format()-参见Ted的答案或dasblinkenlight答案中的字符串插值-就是这样。这是我应该如何回答的,但其他答案已经确定了一种非常巧妙的方法,可以让“if”语句变得多余。谢谢,我才上c#的第二个月,所以我不知道很多,但这很有帮助!
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);
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));