继承我的代码:
MessageBox.Show("numberOfTransactions: "
+ transactionLabel.Text
+ Environment.NewLine
+ Environment.NewLine
+ if(numberHpLaptops > 0)
{
"The number of laptops that you have bought is: "
+ numberHpLaptops};
答案 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));