如何将多个操作数应用于单个运算符?
一个例子:
代替
if (foo == "dog" || foo == "cat" || foo == "human")
我可以有以下或类似的:
if (foo == ("dog" || "cat" || "human"));
您的第一个版本已经在一个表达式中包含多个运算符。听起来您想将多个操作数(“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 ));
但在我看来,您编写的代码已经比任何其他解决方案更具可读性。如果我们不是在这里谈论可能的几十种选择,自然而然。
使用开关盒
switch(foo)
{
case "dog":
case "cat":
case "human":
//Your Code
break;
}
您可以随时尝试,编译并亲自查看:)
("dog" || "cat" || "human")
对 C# 来说不是一个有意义的表达式
也许您可以将它们放在一个数组中并循环它们。
或者更好的是,将它们放在一个数组中,然后提出一个很酷的 lambda 表达式。