C# 如何将多个操作数应用于单个运算符?

C# 如何将多个操作数应用于单个运算符?,c#,operators,C#,Operators,如何将多个操作数应用于单个运算符 例如: 而不是 if (foo == "dog" || foo == "cat" || foo == "human") 我可以有以下或类似情况: if (foo == ("dog" || "cat" || "human")); 您的第一个版本已经在一个表达式中包含多个运算符。听起来像是要将多个操作数(“狗”、“猫”、“人”)应用于单个运算符(=) 对于该特定示例,您可以使用: // Note: could extract this array (or mak

如何将多个操作数应用于单个运算符

例如:

而不是

if (foo == "dog" || foo == "cat" || foo == "human")
我可以有以下或类似情况:

if (foo == ("dog" || "cat" || "human"));

您的第一个版本已经在一个表达式中包含多个运算符。听起来像是要将多个操作数(“狗”、“猫”、“人”)应用于单个运算符(
=

对于该特定示例,您可以使用:

// Note: could extract this array (or make it a set etc) and reuse the same
// collection each time we evaluate this.
if (new[] { "dog", "cat", "human" }.Contains(foo))
但对于所有运营商来说,没有通用的一刀切版本


编辑:如注释中所述,上述操作的性能不如硬编码版本。

可以执行以下操作:

List<string> values = new List<string> {"dog", "cat", "human"}; 
values.Any(s=>s.Equals(foo ));
List values=新列表{“狗”、“猫”、“人”};
任何(s=>s.Equals(foo));
但在我看来,您编写的代码已经比任何其他解决方案更具可读性。
如果我们不在这里讨论几十种可能的选项,自然。

您可以自己尝试、编译和查看:)

对于C来说不是有意义的表达式#

也许你可以把它们放在一个数组中,然后在上面循环

或者更好的是,将它们放在一个数组中,并产生一个很酷的lambda表达式。

使用开关案例

switch(foo)
{
   case "dog":
   case "cat":
   case "human":
   //Your Code
   break;
}

我应该指出,这比简单地硬编码表达式的性能更差(但可能更灵活/可维护)@JonSkeet:谢谢。我重新措辞了我的问题。我比较的(狗、猫、人)是一个操作数,那么什么是“foo”?Operatee?@KMC:好的,基本答案是“一般来说你不能,这里有一个针对给定示例的特定解决方案”。为什么要使用Any而不是Contains?@JonSkeet:它对列表有影响吗?使用
Contains
更简单。。。为什么不使用更简单的代码,这也恰好与.NET2.0兼容?@JonSkeet:测试的问题。我只是在快速和愤怒的打字中选择了这个…:)
switch(foo)
{
   case "dog":
   case "cat":
   case "human":
   //Your Code
   break;
}