你如何索引到 LINQ 中的 var?
Posted
技术标签:
【中文标题】你如何索引到 LINQ 中的 var?【英文标题】:How do you index into a var in LINQ? 【发布时间】:2010-09-07 21:10:52 【问题描述】:我正在尝试让以下代码在 LINQPad 中工作,但无法索引到 var。有人知道如何在 LINQ 中对 var 进行索引吗?
string[] sa = "one", "two", "three";
sa[1].Dump();
var va = sa.Select( (a,i) => new Line = a, Index = i);
va[1].Dump();
// Cannot apply indexing with [] to an expression of type 'System.Collections.Generic.IEnumerable<AnonymousType#1>'
【问题讨论】:
【参考方案1】:正如评论所说,您不能将[]
的索引应用于System.Collections.Generic.IEnumerable<T>
类型的表达式。 IEnumerable 接口仅支持方法GetEnumerator()
。但是使用 LINQ,您可以调用扩展方法 ElementAt(int)
。
【讨论】:
【参考方案2】:您不能将索引应用于 var,除非它是可索引类型:
//works because under the hood the C# compiler has converted var to string[]
var arrayVar = "one", "two", "three";
arrayVar[1].Dump();
//now let's try
var selectVar = arrayVar.Select( (a,i) => new Line = a );
//or this (I find this syntax easier, but either works)
var selectVar =
from s in arrayVar
select new Line = s ;
在这两种情况下,selectVar
实际上是IEnumerable<'a>
- 不是索引类型。不过,您可以轻松地将其转换为一个:
//convert it to a List<'a>
var aList = selectVar.ToList();
//convert it to a 'a[]
var anArray = selectVar.ToArray();
//or even a Dictionary<string,'a>
var aDictionary = selectVar.ToDictionary( x => x.Line );
【讨论】:
以上是关于你如何索引到 LINQ 中的 var?的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用 Linq 的 Where 子句之后选择数组索引?