如何检查某些内容是否等于C#中的任何值列表

时间:2013-02-20 19:51:25

标签: c#

What is the OR operator in an IF statement

当我得到(非常有帮助的)答案时,我回答了这个问题,我认为你应该能够说if (title == "User greeting" || "User name") {do stuff}。现在,如果不明显为什么不起作用,请参考另一个问题及其接受的答案。

但是,我想知道是否有办法给出一个任意的字符串列表来检查某些东西是否等于它们中的任何一个。像if(Array.OR(title, { "User greeting", "User name" })) continue;之类的东西有没有这样的东西,还是我在黑暗中拍摄?它似乎很容易实现。

4 个答案:

答案 0 :(得分:6)

您可以尝试包含运算符:

String[] array = {"One", "Two", "Three"};
if (array.Contains("One"))
{
     //Do stuff       
}

答案 1 :(得分:1)

更全面,更灵活的解决方案,以兑现字符串比较:

using System;
using System.Collections.Generic;
using System.Linq;

public static class StringExtensions
{
    public static bool EqualsAny(this string target, StringComparer comparer, params string[] values)
    {
        return target.EqualsAny(comparer, (IEnumerable<string>) values);
    }

    public static bool EqualsAny(this string target, params string[] values)
    {
        return target.EqualsAny((IEnumerable<string>)values);
    }

    public static bool EqualsAny(this string target, StringComparer comparer, IEnumerable<string> values)
    {
        return values.Contains(target, comparer);
    }

    public static bool EqualsAny(this string target, IEnumerable<string> values)
    {
        return values.Contains(target, StringComparer.OrdinalIgnoreCase);
    }
}

用法:

if (title.EqualsAny("User greeting", "User name"))
{
    //do stuff
}

P上。 S.重复@Servy的话:这样的解决方案适用于一小组值,对于大集合考虑使用Dictionary,HashSet等。

答案 2 :(得分:0)

您可以在这种情况下使用 Enumerable.Contains() 方法。此方法的另一面是枚举一旦找到匹配元素就会终止

  

使用确定序列是否包含指定元素   默认的相等比较器。

string[] fruits = { "apple", "banana", "mango", "orange", "passionfruit", "grape" };
string fruit = "mango";
bool hasMango = fruits.Contains(fruit);

这是 DEMO

不要忘记添加System.Linq命名空间。

答案 3 :(得分:0)

CorrugatedAir的例子相当不错,但如果需要,你可以将它包括在内。

if (new string[] { "test1", "test2", "test3" }.Contains("test1")) Console.WriteLine("it works");

它确实有效:http://ideone.com/QzbvKV(谢谢Soner)

所以我的代码看起来像是:if (new string[] { "User greeting", "User name" }.Contains(title)) Console.WriteLine("title contained");

http://ideone.com/PYugJu

P.S。感谢Soner的链接,我以前从未听说过这个想法!