繁体   English   中英

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

[英]How to check if something equals any of a list of values in C#

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

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

但是,我想知道,如果有一种方法可以给出一个任意的字符串列表来检查是否有什么东西等于它们。 if(Array.OR(title, { "User greeting", "User name" })) continue; 有没有这样的事情,还是我在黑暗中拍摄? 它似乎很容易实现。

您可以尝试Contains运算符:

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

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

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
}

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

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

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

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

这是一个DEMO

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

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

PS感谢Soner的链接,我以前从未听说过ideone!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM