【问题标题】:C# - Is there a way to shorten "if(a.b == 1 || a.b == 4 || a.b == 6)" [duplicate]C# - 有没有办法缩短“if(a.b == 1 || a.b == 4 || a.b == 6)” [重复]
【发布时间】:2015-11-20 10:30:21
【问题描述】:

基本上我有一个对象,出于这个问题的目的,我称之为“a”。如果对象“a”的属性“b”是146 中的任何一个(例如,但可能有更多合适的值)我想将其设置为8(再次用于例子)。现在通常我最终会做类似的事情 -

if( a.b == 1 || a.b == 4 || a.b == 6 ) 
    a.b = 8;

但我不禁想到必须有一些更简单/更短的东西。我真的在寻找类似 MSSQL in 语法的东西(如果存在的话)-

SELECT
  *
FROM table
WHERE
  table.field IN (1, 4, 6)

我想我可以创建一个数组,填充它,然后检查它是否包含我在 if 语句中的值,但这只会导致与原始 ifstatement 几乎相同数量的代码和为if 创建一个数组变量感觉有点矫枉过正 -

int[] values = { 1, 4, 6 };
if(values.Contains(a.b))
    a.b = 8;

【问题讨论】:

  • 在这些情况下,我使用数组方法 - 使代码的意图更加清晰。
  • 在可读性或速度方面很难击败 3 个逻辑操作。
  • 任何替代方案的可读性都会降低。我会保持原样。
  • 创建一个小数组并不是“矫枉过正”。一切都与可读性和可维护性有关。
  • 这是另一个副本:stackoverflow.com/questions/3907299/…

标签: c#


【解决方案1】:

回答您关于 MSSQL IN 类似语法的问题,您可以做的最短的事情是:

if (new[] {1, 4, 6}.Contains(a.b)) {
    a.b = 8;
}

但是,与改进相比,此代码可能会带来更多可读性问题。

【讨论】:

  • 但它并没有真正比原始代码短。它会(很多)慢。
  • 这看起来更短,但实际上 3 个值的差异并不大。另一方面,它的可读性不如简单的if
  • 可读性在这里折腾.......
  • 在 VB.NET 中它甚至更短:Ìf {1,4,6}.Contains(a.b) Then a.b=8
  • @Konamiman 如果你有无穷无尽的 OR 链,那么你“可能”在错误的抽象级别上工作,正确的反应不是让链占用更少的屏幕空间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多