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