小编典典

在LINQ列表中查找项目?

c#

在这里,我有一个简单的示例,可以在字符串列表中找到一个项目。通常我使用for循环或匿名委托来做到这一点:

int GetItemIndex(string search)
{
   int found = -1;
   if ( _list != null )
   {
     foreach (string item in _list) // _list is an instance of List<string>
     { 
        found++;
        if ( string.Equals(search, item) )
        {
           break;
        }
      }
      /* use anonymous delegate
      string foundItem = _list.Find( delegate(string item) {
         found++;
         return string.Equals(search, item);
      });
      */
   }
   return found;
}

LINQ对我来说是新的。我很好奇是否可以使用LINQ在列表中查找项目吗?如果可能怎么办?


阅读 168

收藏
2020-05-19

共1个答案

小编典典

有几种方法(请注意,这 不是 完整的列表)。

1) Single
将返回一个结果,但是如果发现一个或多个结果(可能不是您想要的结果),则将引发异常:

string search = "lookforme";
List<string> myList = new List<string>();
string result = myList.Single(s => s == search);

注意SingleOrDefault()将具有相同的行为,除了它将为引用类型返回null或为值类型返回默认值,而不是引发异常。

2) 哪里
将返回符合您条件的所有项目,因此您可能会获得一个带元素的IEnumerable:

IEnumerable<string> results = myList.Where(s => s == search);

3) First
将返回符合您条件的第一项:

string result = myList.First(s => s == search);

注意FirstOrDefault()将具有相同的行为,除了它将为引用类型返回null或为值类型返回默认值,而不是引发异常。

2020-05-19