5

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

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

但是,我想知道是否有一种方法可以提供任意字符串列表来检查某些内容是否等于其中任何一个。像if(Array.OR(title, { "User greeting", "User name" })) continue;这样的事情还是我在黑暗中拍摄?似乎实现起来相当简单。

4

4 回答 4

8

您可以尝试包含运算符:

String[] array = {"One", "Two", "Three"};
if (array.Contains("One"))
{
     //Do stuff       
}
于 2013-02-20T19:55:27.853 回答
3

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!

于 2013-02-20T20:21:52.117 回答
2

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

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等。

于 2016-12-12T10:28:19.053 回答
1

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

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

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

这是一个演示

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

于 2013-02-20T19:59:19.170 回答