C# 我如何转换这个?

C# 我如何转换这个?,c#,ienumerable,C#,Ienumerable,在数据库中建立索引的最佳方法是什么 IEnumerable<T> 或 (在循环中) 这里推荐的转换路径是什么?获取所需内容的最快和最脏的方法是使用该类。这可以作为IList实现公开(因此您可以根据需要通过索引进行随机访问),但实际上是只读的(因此通常会更改集合的方法,例如,Add,Insert,等等,会抛出异常) 您也可以设计自己的接口,该接口继承自IEnumerable,并且只公开此[int index]getter 但是,您需要为此编写一个包装器,以使其完全有用。不幸的事实是,

在数据库中建立索引的最佳方法是什么

IEnumerable<T>

(在循环中)


这里推荐的转换路径是什么?

获取所需内容的最快和最脏的方法是使用该类。这可以作为
IList
实现公开(因此您可以根据需要通过索引进行随机访问),但实际上是只读的(因此通常会更改集合的方法,例如,
Add
Insert
,等等,会抛出异常)

您也可以设计自己的接口,该接口继承自
IEnumerable
,并且只公开
此[int index]
getter


但是,您需要为此编写一个包装器,以使其完全有用。不幸的事实是,很多代码与IList接口交互只是为了随机访问(不是可变的),因此使用它可能是阻力最小的途径。

如果您想要一个带有索引器的集合,但需要只读的东西,那么就使用。

使用表达式或foreach循环。索引可能会导致很多错误和草率的代码

否则,对IEnumerable执行ToArray,然后进行索引

IEnumerable就是支持枚举的对象。它不一定支持索引,因此不能索引到对象中

例如,使用IEnumerable:

//item.Dates[0];
item.Dates.FirstOrDefault();
//item.Dates[i] in a loop
item.Dates.Select(/*some projection*/);
//or
foreach (var date in item.Dates)
{
    //some action with side effects
}
IEnumerable<T>
item.Dates[0]
item.Dates[i]
//item.Dates[0];
item.Dates.FirstOrDefault();
//item.Dates[i] in a loop
item.Dates.Select(/*some projection*/);
//or
foreach (var date in item.Dates)
{
    //some action with side effects
}