我该怎么转换呢?

leo*_*ora 2 c# ienumerable

索引的最佳方法是什么?

IEnumerable<T>
Run Code Online (Sandbox Code Playgroud)

我们有很多代码正在发展

 IList<T>
Run Code Online (Sandbox Code Playgroud)

我们想要将它们改为:

IEnumerable<T>
Run Code Online (Sandbox Code Playgroud)

因为我们希望它们是只读的,但我们有许多代码,如:

item.Dates[0]
Run Code Online (Sandbox Code Playgroud)

要么

item.Dates[i]
Run Code Online (Sandbox Code Playgroud)

(在循环中).

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

Dan*_*Tao 6

获得你所需要的最快最肮脏的方法就是使用这门ReadOnlyCollection<T>课程.这可以被公开为IList<T>实现(所以你得到的指数随机存取,如需要的话),但实际上是只读(这样的方法通常会改变集合,如Add,Insert等掷异常,而不是).

您也可以设计自己的界面,类似于IArray<T>继承的界面,IEnumerable<T>也只是暴露了一个this[int index] getter.

但是你需要为此编写一个包装器才能使它完全有用.不幸的事实是,那里的许多代码IList<T>只与随机访问的接口交互(不可变),所以使用它可能是你阻力最小的路径.