首页 / 问答 / C#/.NET/.NET Core应用程序编程开发中如何使用LINQ从集合中查找指定的元素呢?

C#/.NET/.NET Core应用程序编程开发中如何使用LINQ从集合中查找指定的元素呢?

.NET C# Linq 集合 .NET Core 2.44K 次浏览
0

在C#/.NET/.NET Core应用程序编程开发中,传统的在不使用linq的情况下,如果要从一个集合中查找指定的元素,经常用到的实现方式应该是循环遍历这个集合,看与指定的条件是否符合,如果符合,则返回元素的索引位置,示例代码如下:

int GetItemIndex(string search)
{
   int found = -1;
   if ( _list != null )
   {
     foreach (string item in _list)
     {
        found++;
        if ( string.Equals(search, item) )
        {
           break;
        }
      }
   }
   return found;
}

那么,如何使用linq从一个集合中查找指定的元素呢?

回复 [×]
提交评论
请输入评论内容

2 个回答

  • 0

    在C#/.NET/.NET Core的应用程序编程开发中,使用linq从集合中查找符合条件的指定元素的方式其实有很多种。

    1) 使用Single()扩展方法,此方法会返回查找到的符合条件的元素,但如果集合中有两个或者两个以上的元素满足,则会抛出异常,示例代码如下:

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

    2) 使用First()扩展方法,此方法会返回集合中第一个查找到的符合条件的元素,如果集合中没有符合条件的元素,则会抛出异常,示例代码如下:

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

    3) 使用Where()扩展方法,此方法会返回集合中所有符合条件的元素的子集,示例代码如下:

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

    Where()扩展方法返回的是一个IEnumerable的集合。

    Rector的个人主页

    Rector

    2020-01-29 回答

    • 0

      如果只想获取集合中第一个匹配元素的索引位置,则可以使用如下的方法:

      int index = list.Select((item, i) => new { Item = item, Index = i })
                      .First(x => x.Item == search).Index;
      

      或者

      var tagged = list.Select((item, i) => new { Item = item, Index = (int?)i });
      int? index = (from pair in tagged
                  where pair.Item == search
                  select pair.Index).FirstOrDefault();
      
      Rector的个人主页

      Rector

      2020-01-29 回答

      我来回答