在.Net中,“最简洁”的方法来检查字符串是否是多个值中的一个?

时间:2009-07-28 10:57:42

标签: .net string

我想检查字符串是否与值列表中的一个匹配。

我当然有很多方法可以解决这个问题:if语句,switch语句,RegEx等等。但是,我会认为.Net会有类似的东西

if (myString.InList("this", "that", "the other thing"))

到目前为止,我能找到的最接近的东西是:

"this; that; the other thing;".Contains(myString)

如果我想在一行中进行检查并且不想使用RegEx,这几乎是唯一的方法吗?

4 个答案:

答案 0 :(得分:10)

如果你使用的是.NET 3.0,那么有一种类型可枚举对象的方法可以让它在一个内联构造的字符串数组上工作。这对你有用吗?

if ((new string[] { "this", "that", "the other thing" }).Contains(myString))

感谢您的提示评论。实际上,这也有效:

if ((new [] { "this", "that", "the other thing" }).Contains(myString))

我一直对使用推断类型是否是一个好主意感到矛盾。简洁是好的,但有时候,当没有明确说明类型时,我会试图找出某些变量的数据类型而感到沮丧。当然,对于这样简单的事情,类型应该是显而易见的。

答案 1 :(得分:5)

您可以使用.NET 3.5中提供的扩展方法来使用

之类的语法
if (myString.InList("this", "that", "the other thing")) {}

只需添加这样的内容(并导入):

public static bool InList(this string text, params string[] listToSearch) {
    foreach (var item in listToSearch) {
        if (string.Compare(item, text, StringComparison.CurrentCulture) == 0) {
            return true;
        }
    }
    return false;
}

如果您使用的是旧版本,您仍然可以使用此功能,但您需要将其称为:

if (InList(myString, "this", "that", "the other thing")) {}

当然,在InList函数中,删除此关键字。

答案 2 :(得分:1)

你可以将你和BlueMonks的答案和使用结合起来(假设是.NET 3):

if ("this;that;the other thing;".Split(";").Contains(myString) ...

答案 3 :(得分:0)

嘿,我正在寻找相同的东西,但反过来,我的字符串值应该在值列表中进行比较

List<string> methodList = new List<string>();
methodlist.add("this");

 methodlist.add("That");
 methodlist.add("Everything");
 string line = "this is line number 1";
 string line2 = "that is line number 2";
 string line3 = "about the everything else";
 line.contains(methodlist);
 line2.contains(methodlist);
希望你得到这个要求,早期帮助可能非常有用。到目前为止,我已经使用如下,但寻求高级帮助

 private static bool LineIsInTheList(List<string> list,string line)
    {
        foreach (string methodName in list)
        {
            if (line.Contains(methodName))
                return true;
        }
        return false;
    }