【问题标题】:How to use ?: operator [closed]如何使用?:运营商[关闭]
【发布时间】:2012-05-10 22:54:24
【问题描述】:

如何将以下代码转换为使用 ?: 运算符.. 可能吗?

tbtotalamount.Text = string.Format("{0:n2}", dtl.Compute("sum(NetPay)", ""));
if (tbtotalamount.Text.Length == 0)
{
    tbtotalamount.Text = "0";
}

【问题讨论】:

标签: c# string conditional-operator


【解决方案1】:

引用的代码不会因使用 ? : 运算符而受益,该运算符称为 conditional operator(有时称为“三元运算符”,尽管从技术上讲,它只是 a 三元运算符 - 例如,具有三个操作数的运算符)。

通常,当您有一个变量并希望根据条件为其分配两个值之一时,条件运算符很方便。所以以这种形式编码:

if (someCondition) {
    a = "one value";
}
else {
    a = "a different value";
}

可以改写

a = someCondition ? "one value" : "a different value";

但是,在您的情况下,直到您完成 string.Format 之后,您才知道 tbtotalamount.Text 是空白的,因此您最好将其保留为 if

【讨论】:

  • @kashif:不客气,很高兴有帮助。 (顺便说一句,我看不出这个问题有什么大惊小怪的。我投票决定重新开放,fwiw。)
  • 用你上面提到的例子我知道它没用?运算符并将其留给 if 更好...此外,我得到了要点,即如何以及何时?使用运算符。这就是它对我的帮助。
【解决方案2】:

是的。方法如下:

string test = string.Format("{0:n2}", dtl.Compute("sum(NetPay)", ""));
tbttotalamount.Text = test.length == 0 ? "0" : test;

很抱歉看到这么多反对票,我不熟悉 ? (三元)运算符也很长时间。我觉得很方便。

它的左边是你的测试表达式,它应该是评估后的布尔值。右边是操作符返回的内容:如果为真,它将返回:左边的值。如果为 false,则为右侧的值。请注意,整个表达式会返回一些内容,编译器需要您对其进行处理。您不能使用三元运算来替换调用返回类型为void 的函数的 if-else 语句。

我的意思是,很多以前从未使用过它的人(比如我)似乎认为这是一个 if-else 替换,它是 不是

【讨论】:

  • 我害怕对这个问题投反对票。任何方式都非常感谢
  • 这不会在 int 文字中编译为 0,而 teststring 变量。
  • 我认为第二行甚至无法编译。
  • @HenkHolterman 在编辑之前没有。
  • 如果您要测试的真实条件是 dtl.Compute 返回 null,为什么不使用它呢? var sum = dtl.Compute("sum(NetPay)", string.Empty); tbttotalamount.Text = (sum != null) ? string.Format("{0:n2}", sum) : "0"; 现在我可能会首先使用三元运算符编写 - 或者您也可以使用空合并运算符 (sum ?? 0)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 2013-08-15
  • 2017-05-21
  • 2015-05-28
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多