【问题标题】:C#: Better Syntax for Two Comparisons Of One Variable in a Conditional StatementC#:在条件语句中对一个变量进行两次比较的更好语法
【发布时间】:2018-05-10 18:47:04
【问题描述】:

有没有一种快捷的方法来处理条件语句中的两个比较?

例如:

if(ReturnedCount > 0 && ReturnedCount < 50)
{
    ...
}

我相当肯定变量必须始终位于运算符的左侧,因为当我尝试以下操作时它不起作用:

if(0 < ReturnedCount < 50)
{
    ...
}

我在 google 上搜索了与 SQL 中的 between 关键字等效的 c#,但没有得到很好的结果。

有没有更好的方法来处理同一个变量的这种双重比较?

【问题讨论】:

  • 不是真的,您可以编写一个名为bool IsBetween(value, min, max) 的函数,但您不能按照您的方式简写它。
  • 您只能使用该运算符评估两侧,因此无法明确表示 (variable &gt; 0 &amp;&amp; variable &lt; 50)
  • 在此链接中,有些答案可能对您有所帮助。 stackoverflow.com/questions/3188672/…
  • @ArpitGupta 只要不使用第一个答案(Enumerable.Range()),因为那是一个可怕答案
  • @maccettura 同意,以防万一,OP 找到有用的东西。

标签: c# conditional operators


【解决方案1】:

简短的回答,C# 没有任何语法糖可以帮助,每个条件测试只是被添加到语句中。

在某些时候,当它开始变得难以阅读时,您可以将其分解为返回 true/false 的方法调用。

即。

if (Pred.Equals( a, b, c, d ))
{ ... }

其中,Pred 是一个(不存在的)静态类,包含用作逻辑谓词的辅助方法。

或者……

第二种方法是链接方法调用来表示连续的条件测试。

即。

if (a.GreaterThan(b).LessThan(c).IsTrue())
{...}

其中,GreaterThan 和 LessThan 是扩展方法,它们返回 'this' 值或 'null',如果 'this' 不为 null,IsTrue 返回 true。

这是我自己遇到的仅有的两种技术,祝你好运!

【讨论】:

  • 感谢您的回答。尤其是第二种方法,当条件的数量不值得构建辅助方法来处理它们时,我发现它对于验证多个条件很有用。同时,我发现比你自己拼出每个条件更容易阅读。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
  • 2011-09-15
  • 2022-12-01
  • 1970-01-01
  • 2012-03-12
  • 2014-05-23
相关资源
最近更新 更多