索引的最佳方法是什么?
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)
(在循环中).
这里推荐的转换路径是什么?
获得你所需要的最快最肮脏的方法就是使用这门ReadOnlyCollection<T>课程.这可以被公开为IList<T>实现(所以你得到的指数随机存取,如需要的话),但实际上是只读(这样的方法通常会改变集合,如Add,Insert等掷异常,而不是).
您也可以设计自己的界面,类似于IArray<T>继承的界面,IEnumerable<T>也只是暴露了一个this[int index] getter.
但是你需要为此编写一个包装器才能使它完全有用.不幸的事实是,那里的许多代码IList<T>只与随机访问的接口交互(不可变),所以使用它可能是你阻力最小的路径.