我有两个枚举列表,我想要执行它们之间的操作。假设我的枚举定义有3个元素为true,false和NA。
public enum myEnum {
True,
False,
NA
}
我有两个List1和List2列表,都包含10个元素。我想要这些结果:
True && False = False
True && NA = NA
False && NA = False
True && True = True
False && False = False
NA && NA = NA
我想知道C#中有任何内置功能可以给我上面提到的结果。我试图避免写长代码。
答案 0 :(得分:4)
使用您描述的逻辑,开始编写可以在两个值上执行所需的And操作的方法。这实际上很容易处理,好像其中任何一个值False
都返回False
,如果没有False
而另一个值NA
则返回NA
,如果两者都是真的,你就会返回真实,唯一剩下的情况。
public static myEnum And(this myEnum first, myEnum second)
{
if (first == myEnum.False || second == myEnum.False)
return myEnum.False;
if (first == myEnum.NA || second == myEnum.NA)
return myEnum.NA;
return myEnum.True;
}
接下来,您似乎想要比较同一索引处的每个列表中的项目,因此第一个与第一个,第二个与第二个等进行比较,以创建相同的新列表大小与另外两个一样。您可以使用Zip
来使用我们已经定义的方法执行此逻辑操作:
var query = list1.Zip(list2, (a,b) => a.And(b));
答案 1 :(得分:2)
bool?
(Nullable<bool>
)有三个值,如果您使用逻辑和(&
)运算符,则会为您提供所需的所有值:
(bool?)true & (bool?)false = false
(bool?)true & (bool?)null = null
(bool?)false & (bool?)null = false
(bool?)true & (bool?)true = true
(bool?)false & (bool?)false = false
(bool?)null & (bool?)null = null