如果要元素的索引,可以这样做:
int index = list.Select((item, i) => new { Item = item, Index = i })
.First(x => x.Item == search).Index;
// or
var tagged = list.Select((item, i) => new { Item = item, Index = i });
int index = (from pair in tagged
where pair.Item == search
select pair.Index).First();
在第一遍中,您无法摆脱lambda。
请注意,如果该项目不存在,则会抛出该异常。这可以通过使用可为null的int来解决此问题:
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();
如果您想要该物品:
// Throws if not found
var item = list.First(item => item == search);
// or
var item = (from item in list
where item == search
select item).First();
// Null if not found
var item = list.FirstOrDefault(item => item == search);
// or
var item = (from item in list
where item == search
select item).FirstOrDefault();
如果要计算匹配的项目数:
int count = list.Count(item => item == search);
// or
int count = (from item in list
where item == search
select item).Count();
如果要匹配所有项目:
var items = list.Where(item => item == search);
// or
var items = from item in list
where item == search
select item;
并且null
在任何情况下都不要忘记检查列表。
或使用(list ?? Enumerable.Empty<string>())
代替list
。
感谢Pavel在评论中提供的帮助。