2010-05-11 47 views
2

是否有可能以某种方式将多个变量与if语句中的一个常量进行比较?这将是如果不是C#多重比较可能吗?

if (col.Name != "Organization" && col.Name != "Contacts" && col.Name != "Orders") { } 

非常有帮助,我可以只说

if (col.Name != "Organization" || "Contacts" || "Orders") { } 

而且我知道我可以使用一个列表,但在某些情况下,我不想...谢谢!

回答

5

如果你只是在寻找一个快捷方式,你可能不会得到太多。 ChaosPandion提到了switch语句,这里使用了一个数组。

if (new string[] { "Bar", "Baz", "Blah" }.Contains(foo)) 
{ 
    // do something 
} 
+0

我不觉得你通过交换机或if语句获得了很多。 – ChaosPandion 2010-05-11 02:41:26

+0

更容易断言此代码作为人类读者正在做什么,并验证它与原始问题相比是否正确。 (没有明显的错误vs显然没有错误) – earlNameless 2010-05-11 02:43:56

+0

我喜欢这个。在功能上当然它没有获得任何东西,ChaosPandion,但就我个人喜欢的可读性和干净的代码而言。当然,如果语言内置了某些东西,而不是那么疯狂,但它仍然是一个很好的解决方案。谢谢! – 2010-05-11 02:45:34

5

switch语句大概和你一样好。

switch (col.Name) 
{ 
    case "Organization": 
    case "Contacts": 
    case "Orders": 
     break; 
    default: 
     break; 
} 
+0

啊。知道这一点。但重点是减少不必要的代码。不知道是否有与Linq或东西的方式 – 2010-05-11 02:36:29

+0

你可以在一个回合的方式使用“Linq”。为了实现Linq,他们需要添加扩展方法。你可以使用它来为字符串添加方法,从而使你的代码更加简洁。 – John 2010-05-11 02:46:45

+0

效率最高的是最详细的。 这种情况证明是多久? – harpo 2010-05-11 03:04:25

1

您还可以将扩展方法添加到字符串类,以使您的比较不那么冗长。我会选择安东尼提供的解决方案,并将其放在名为EqualsAny或其他类似的扩展方法中。

1

我第二次约翰对扩展方法的评论。我会做这样的事情:

public static class StringExtensions 
{ 
    public static bool In(this string input, params string[] test) 
    { 
     foreach (var item in test) 
      if (item.CompareTo(input) == 0) 
       return true; 
     return false; 
    } 
} 

然后你可以这样调用:

 string hi = "foo"; 
     if (hi.In("foo", "bar")) { 
      // Do stuff 
     } 
+0

请注意,您也可以将此扩展为对象扩展 - 只需将CompareTo语句更改为严格== – 2010-05-11 03:01:50

+0

通过调用'Array.IndexOf'将该代码切成两半。 – 2010-05-11 03:04:06

+0

你可以通过使用'return test.Contains(input);'或'return test.Any(item => item == input);'而不是foreach循环来简化内部。 – 2010-05-11 03:04:33