在这里,我有一个简单的示例,可以在字符串列表中找到一个项目。通常我使用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在列表中查找项目吗?如果可能怎么办?
有几种方法(请注意,这 不是 完整的列表)。
1) Single 将返回一个结果,但是如果发现一个或多个结果(可能不是您想要的结果),则将引发异常:
string search = "lookforme"; List<string> myList = new List<string>(); string result = myList.Single(s => s == search);
注意SingleOrDefault()将具有相同的行为,除了它将为引用类型返回null或为值类型返回默认值,而不是引发异常。
SingleOrDefault()
2) 哪里 将返回符合您条件的所有项目,因此您可能会获得一个带元素的IEnumerable:
IEnumerable<string> results = myList.Where(s => s == search);
3) First 将返回符合您条件的第一项:
string result = myList.First(s => s == search);
注意FirstOrDefault()将具有相同的行为,除了它将为引用类型返回null或为值类型返回默认值,而不是引发异常。
FirstOrDefault()