C#-检查字符串数组列表中是否存在子字符串

时间:2018-12-10 16:13:58

标签: c# arraylist

假设我有一个类似下面的Arraylist(arr1)

 "String1 is present"
 "String2 is present"
 "String3 is present"

我想看看此数组列表中是否存在“ String2”。我做了类似以下的事情:

        var containsstringmatch = arr1.OfType<string>().Any(arg=>arg.Contains("String2"));

        if (containsstringmatch==true)
        {
            IEnumerable v1 = arr1.OfType<string>().Where(arg=>arg.Contains("String2"));

            foreach (string s in v1)
            {
                st1 = s;
            }

            Console.WriteLine(st1);
        }

这给了我下面很好的输出:

"String2 is present"

我想看看如果不使用foreach循环就可以实现这一目标。有人可以提供有关操作方法的建议吗。

谢谢

3 个答案:

答案 0 :(得分:1)

我现在不应该在.NET中使用ArrayList,而应该使用List<T>(如果可能的话是 )。

至:

  

我想看看如果没有我使用foreach是否可以实现   循环。

如果这样,则意味着您要避免使用foreach构造并直接执行所有操作:

arr1.OfType<string>()
    .Where(arg => arg.Contains("String2"))
    .ToList()
    .ForEach(s => Console.WriteLine(s));

或者如果您只想找到满足上述条件的最后一个元素:

var result = arr1.OfType<string>().LastOrDefault(arg => arg.Contains("String2"));

答案 1 :(得分:1)

如果只想打印包含搜索的第一个字符串,则可以使用FirstOrDefault()

var foundString =  arr1.OfType<string>().FirstOrDefault(arg => arg.Contains("String2"));
Console.WriteLine(string.IsNullOrEmpty(foundString) ? "Not found" : foundString);

此外,正如Aomine在他的回答ArrayLists中所写的那样,当我们使用.Net 1.1时,它在那里很好。由于.Net 2.0引入了泛型,因此应避免使用ArrayLists。

正如Rufus L在他的评论中所写,您当前的代码将获取包含搜索字符串而不是第一个字符串的 last 字符串。如果要最后一个而不是第一个,则只需使用LastOrDefault而不是FirstOrDefault

答案 2 :(得分:-1)

没有foreachfor循环就无法做到这一点。但是您可以创建一个扩展方法,该方法会将代码移出您的方法。

public static class ConsoleExtensions
{
    public static void WriteToConsole(this IEnumerable<string> list)
    {
        foreach (string item in list)
            Console.WriteLine(item);
    }
}

用法:

arr1.OfType<string>().Where(arg=>arg.Contains("String2")).WriteToConsole();