5

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

一个例子:

代替

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

我可以有以下或类似的:

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

4 回答 4

9

您的第一个版本已经在一个表达式中包含多个运算符。听起来您想将多个操作数(“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))

但是对于所有运营商来说,没有通用的万能版本。

编辑:如评论中所述,上述内容的性能不如硬编码版本。

于 2012-04-27T10:21:06.887 回答
1

可以做这样的事情:

List<string> values = new List<string> {"dog", "cat", "human"}; 
values.Any(s=>s.Equals(foo ));

但在我看来,您编写的代码已经比任何其他解决方案更具可读性。如果我们不是在这里谈论可能的几十种选择,自然而然。

于 2012-04-27T10:22:04.323 回答
1

使用开关盒

switch(foo)
{
   case "dog":
   case "cat":
   case "human":
   //Your Code
   break;
}
于 2012-04-27T11:23:51.597 回答
0

您可以随时尝试,编译并亲自查看:)

("dog" || "cat" || "human")

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

也许您可以将它们放在一个数组中并循环它们。

或者更好的是,将它们放在一个数组中,然后提出一个很酷的 lambda 表达式。

于 2012-04-27T10:25:35.263 回答