C#/.NET/.NET Core应用程序编程开发中如何使用LINQ从集合中查找指定的元素呢?
2.44K 次浏览
在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 个回答
-
在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
的集合。 -
如果只想获取集合中第一个匹配元素的索引位置,则可以使用如下的方法:
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();