如何检查某个值是否等于C#中的某个值列表

本文关键字:列表 是否 检查 何检查 | 更新日期: 2023-09-27 18:00:16

IF语句中的OR运算符是什么

很久以前我问过这个问题,当我得到(非常有用的)答案时,我认为你应该能说if (title == "User greeting" || "User name") {do stuff}。现在,如果不清楚为什么这不起作用,请参考另一个问题及其公认的答案。

然而,我想知道是否有一种方法可以给出一个任意的字符串列表,以检查某个字符串是否等于其中的任何一个。类似if(Array.OR(title, { "User greeting", "User name" })) continue;的东西有这样的东西吗?还是我在黑暗中拍摄?实现起来似乎相当简单。

如何检查某个值是否等于C#中的某个值列表

您可以尝试Contains运算符:

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

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

附言:谢谢Soner的链接,我以前从未听说过ideone!

更全面、更灵活的字符串比较解决方案:

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
}

第页。S.重复@Servy的单词:这样的解决方案适用于小的值集,对于大的值集可以考虑使用Dictionary、HashSet等。

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

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

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

这是演示

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