需要有关三元运营商的帮助!

时间:2009-09-15 21:29:24

标签: c#

我有这段代码:

field = string.Format(Str, value1, value2,
        found == true ? fieldName : "", found  == true ? "product" : "");

有没有办法将两个found == true三元运算合并为一个更简洁的代码?

9 个答案:

答案 0 :(得分:19)

您不需要== true位:

field = string.Format(Str, value1, value2, found ? fieldName : "", found ? "product" : "");

但是,在我看来,以下内容更容易阅读:

if (found) {
    field = string.Format(Str, value1, value2, fieldName, "product");
}
else {
    field = string.Format(Str, value1, value2, "", "");
}

答案 1 :(得分:7)

具有多个三元运算符的长行可能非常难以理解。换行符有助于 little 具有可读性。

field = string.Format(Str,
    value1,
    value2,
    found ? fieldName : "",
    found ? "product" : "");

答案 2 :(得分:6)

这只是一个意见,但...... YUK!我讨厌读这样的代码。

三元运算符可以减少代码,但可读性在这里受到影响。如果它损害了可读性,请不要使用更少的代码行。

答案 3 :(得分:2)

怎么样:

field = found ? string.Format(Str, value1, value2, fieldName, "product")
              : string.Format(Str, value1, value2, "", "");

只有一个三元组,比原始示例更易读,但我会考虑使用if / else语句以便于阅读......

答案 4 :(得分:1)

你可以这样缩写:

field = string.Format(Str, value1, value2, found ? fieldName : "", found ? "product" : "");

答案 5 :(得分:1)

停止将foundtrue进行比较。您希望条件是否为found,而不是found是否为true

found ? fieldName : string.Empty

答案 6 :(得分:0)

比较真实是不必要的:

field = string.Format(Str, value1, value2, found ? fieldName : "", found ? "product" : "");

答案 7 :(得分:0)

由于String.Format采用params数组,因此尚未建议的一个主要变体是

field = string.Format(Str, found
                      ? new object[] {value1, value2, fieldName, "product"}
                      : new object[] {value1, value2, string.Empty, string.Empty});

答案 8 :(得分:0)

这行代码使我的手动解析器花了一些时间来消化比我想要的更长。我只是为了简洁而优雅的编码,但是你宁愿在几个月的时间内遇到这个,虽然还有几行?

if (found)
// Use empty strings for fieldName and productName
field = String.Format(Str, value1, value2, fieldName, productName);
else
// Use the fieldName and productName in the string
field = String.Format(Str, value1, value2, String.Empty, String.Empty);

仅仅是我的个人品味,但我知道我宁愿遇到哪一个。