条件语句的简写

时间:2011-09-22 12:48:29

标签: c# c#-4.0 if-statement

我正在寻找一种写这样的东西的方法:

if (product.Category.PCATID != 10 && product.Category.PCATID != 11 && product.Category.PCATID != 16) {   }

以下面的简写方式,当然不起作用:

if (product.Category.PCATID != 10 | 11 | 16) {   }

那么有什么简便的方法可以做类似的事情吗?

7 个答案:

答案 0 :(得分:6)

是的 - 你应该使用一套:

private static readonly HashSet<int> FooCategoryIds
    = new HashSet<int> { 10, 11, 16 };

...

if (!FooCategoryIds.Contains(product.Category.PCATID))
{
}

当然,您可以使用列表或数组或基本上任何集合 - 对于小型ID集合,您使用哪个ID无关紧要...但我个人会使用HashSet来表示我真的只对“set-ness”感兴趣,而不是订购。

答案 1 :(得分:5)

您可以使用扩展方法:

    public static bool In<T>(this T source, params T[] list)
    {
        return list.Contains(source);
    }

并称之为:

  if (!product.Category.PCATID.In(10, 11, 16)) {  }

答案 2 :(得分:3)

不完全是捷径,但也许对你来说是正确的。

var list = new List<int> { 10, 11, 16 };
if(!list.Contains(product.Category.PCATID))
{
  // do something
}

答案 3 :(得分:2)

嗯......我认为速记版本是if(true),因为如果PCATID == 10,那就是!= 11和!= 16,所以整个表达式是{{1} }。
truePCATID == 11也是如此 对于任何其他数字,所有三个条件都是PCATID == 16 ==&GT;表达式始终为true

其他答案只有在你真正意思是这样的情况下才有效:

true

答案 4 :(得分:1)

你可以这样做:

List<int> PCATIDCorrectValues = new List<int> {10, 11, 16};

if (!PCATIDCorrectValues.Contains(product.Category.PCATID)) {
    // Blah blah
}

答案 5 :(得分:1)

if (!new int[] { 10, 11, 16 }.Contains(product.Category.PCATID))
{
}

using System.Linq添加到班级的顶部,或.Contains生成编译错误。

答案 6 :(得分:0)

使用switch简化:

switch(product.Category.PCATID) {
    case 10:
    case 11:
    case 16: {
        // Do nothing here
        break;
    }
    default: {
        // Do your stuff here if !=10, !=11, and !=16
        //    free as you like
    }
}