Проверьте строку, чтобы увидеть, встречается ли внутри нее строковый массив - PullRequest
0 голосов
/ 27 мая 2009

У меня есть общий список строк: List listOfString = new List ();

Затем я добавляю 4 строки в этот список:

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

Я хочу проверить проверку строковой переменной, если она содержит какой-либо элемент в моем строковом массиве.

Я видел описанный метод 'Any', но он не компилируется в C #, я могу сделать это только в цикле for?

Спасибо,.

Ответы [ 3 ]

1 голос
/ 27 мая 2009

Вы можете использовать функцию Any, если используете расширения метода LINQ (.net 3.5). как это:

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

но если вы дезассемблируете Any, вы все равно увидите, что это просто петля.

публичная статика бо

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);

Надеюсь, это поможет.

1 голос
/ 27 мая 2009

Я думаю, что вопрос больше в тестировании, если строка содержит какие-либо элементы массива.

Должно выглядеть так в псевдокоде (я не очень знаком с .Net)

function StringContainsAny(String toTest, List<String> tests)
{
    foreach( String test in tests )
    {
        if( toTest.Contains(test) )
        {
            return test;
        }
    }
    return null;
}
0 голосов
/ 27 мая 2009

Если я правильно понимаю ваш вопрос, вам нужно это:

    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));
...