【问题标题】:Use of ternary operator without using assignment or return使用三元运算符而不使用赋值或返回
【发布时间】:2015-06-24 01:50:06
【问题描述】:

你好,我有一个问题

bool isCompleted = true;

if(isCompleted){x= 5}

所以我想使用上面的代码使用三元运算符而不使用返回或赋值

isCompleted ? int x = 5 : <do nothing>;

那么是否可以不使用return或assignment而使用三元运算符呢?

谢谢。

【问题讨论】:

  • 您必须在某些表达式中存储或使用三元运算符的结果,否则我认为没有使用三元运算符的意义。
  • 你想做什么?三元运算符在这里完成了什么?为什么,如果你坚持喜欢问号,不只是这样做:x = isCompleted ? 5 : 0;
  • 此代码是示例代码,根据我的要求,我不想使用赋值 (x),因为我只想这样:true?:

标签: c#


【解决方案1】:

尝试像这样使用它:

x = isCompleted  ? intValue(if true) : intValue(if false);

由于您已将x 声明为int,因此无论评估的条件如何,您都必须提供int 中的值。您使用的任何其他类型值都不会在这里工作。因此,您写的false 是错误的。您可能想在此处提供 int 值。

如果您想根据布尔条件执行一些代码逻辑,您可能希望在此处使用if...else,因为这将帮助您做的不仅仅是为变量分配一些值。

希望这会有所帮助。

【讨论】:

  • HarveySpecter 此代码是示例代码,作为我的要求,我不想像我想要的那样使用赋值 (x):true?:
  • 如果你想执行一些逻辑而不是仅仅为变量赋值,你可能想使用if。这样,当if 条件为真时,您可以执行任何您想要的逻辑,而在条件为假时什么也不做。总之,使用简单的if...else
  • 是的,这是最终的解决方案,但我想到了三元,这样我就可以优化我的代码,无论如何谢谢。
  • 当然优化了。即使我更喜欢它,但在某些情况下,你没有太多选择。很高兴它对您有所帮助,我也更新了答案。
【解决方案2】:

您需要在布尔值之前进行赋值。

x = isCompleted ? 5: 0;

其次,你有一个类型错误。如果 isCompleted = true 则上面将设置 x=5 否则将设置 x=0

isComplete ? 5 :false 

将无法编译,因为您无法将布尔值分配给 int。

【讨论】:

  • Jon As 我不想使用这个赋值运算符
  • 可以理解。如果是下面指出的情况,那么使用 if 语句会更强大。三级运算符很好,但有时不合适。
【解决方案3】:

了解三元运算符的语法 (MSDN):

条件运算符 (?:) 返回两个值之一,具体取决于布尔表达式的值。

所以你的代码必须改写为:

x = isCompleted ? 5 : 0;

【讨论】:

  • Yoh Deadfall 此代码是示例代码,作为我的要求,我不想使用赋值 (x),因为我只想像这样:true?:
  • 使用if运算符:if (isCompleted) x = 5;
  • 是的,这是最终的解决方案,但我考虑了三元,以便我可以优化我的代码,无论如何谢谢
【解决方案4】:

如果为真,您想将 x 设置为 5。否则保持x值?

x = 已完成? 5:x:

【讨论】:

    猜你喜欢
    • 2012-02-14
    • 1970-01-01
    • 2020-02-09
    • 2011-03-15
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 2013-06-28
    相关资源
    最近更新 更多