我正在寻找一种写这样的东西的方法:
if (product.Category.PCATID != 10 && product.Category.PCATID != 11 && product.Category.PCATID != 16) { }
以下面的简写方式,当然不起作用:
if (product.Category.PCATID != 10 | 11 | 16) { }
那么有什么简便的方法可以做类似的事情吗?
答案 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} }。
true
和PCATID == 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
}
}