检查字符串以查看字符串数组中是否出现字符串

时间:2009-05-27 10:26:00

标签: string generics list .net-2.0

我有一个通用的字符串列表: List listOfString = new List();

然后我在此列表中添加4个字符串:

        listOfString .Add("test1");
        listOfString .Add("test2");
        listOfString .Add("test3");
        listOfString .Add("test4");

我想检查一个字符串变量,如果它包含我的字符串数组中的任何元素。

我看过所描述的'Any'方法,但这不能用C#编译,我只能在for循环中这样做吗?

谢谢,

3 个答案:

答案 0 :(得分:1)

我认为问题更多的是测试字符串是否包含数组的任何元素。

伪代码应该是这样的(我不熟悉.Net)

function StringContainsAny(String toTest, List<String> tests)
{
    foreach( String test in tests )
    {
        if( toTest.Contains(test) )
        {
            return test;
        }
    }
    return null;
}

答案 1 :(得分:1)

如果使用LINQ方法扩展(.net 3.5),则可以使用Any函数。 像这样:

var foobar = "foobar";
new[] {"foo", "bar"}.Any(foobar.Contains);

但是如果你消失,你还会看到它只是一个循环。

public static bo

public static bool Any<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
{
    if (source == null)
    {
        throw Error.ArgumentNull("source");
    }
    if (predicate == null)
    {
        throw Error.ArgumentNull("predicate");
    }
    foreach (TSource local in source)
    {
        if (predicate(local))
        {
            return true;
        }
    }
    return false;
}

因此,如果您不想使用.net 3.5,.Net 2.0中的上述功能将如下所示:

public static class Utilities
{
    public delegate bool AnyPredicate<T>(T arg);
    public static bool Any<TSource>(IEnumerable<TSource> source, AnyPredicate<TSource> predicate)
    {
        if (source == null)
        {
            throw new ArgumentException("source");
        }
        if (predicate == null)
        {
            throw new ArgumentException("predicate");
        }
        foreach (TSource local in source)
        {
            if (predicate(local))
            {
                return true;
            }
        }
        return false;
    }
}

用法:

    var foobarlist = new[]{"foo", "bar"};
    var foobar = "foobar";
    var containsfoobar = Utilities.Any(foobarlist, foobar.Contains);

我希望有所帮助。

答案 2 :(得分:0)

如果我理解你的问题,你需要这个:

    public static bool ContainsAnyElement(IList<string> l, string input)
    {
        foreach (var s in l)
        {
            if (l.Contains(s))
                return true;
        }
        return false;
    }

    // Usage

    IList<string> l = new List<string>() { "a", "b", "c" };

    string test = "my test string with aa bbb and cccc";

    Console.WriteLine(ContainsAnyElement(l, test));