Dav*_*les 34 c# collections generic-collections
在C#中获取类型化的,只读的空列表的标准方法是什么,还是有一个?
ETA:对于那些问"为什么?"的人:我有一个虚拟方法返回IList(或者更确切地说,回答后IEnumerable),默认实现为空.无论列表返回什么都应该是readonly因为写入它将是一个bug,如果有人试图,我想立即停止并着火,而不是等待bug稍后以某种微妙的方式出现.
Dan*_*Tao 24
就个人而言,我认为这比任何其他答案都要好:
static readonly IList<T> EmptyList = new T[0];
Run Code Online (Sandbox Code Playgroud)
IList<T>.new List<T>().AsReadOnly().IList<T>(如果您愿意).顺便说一下,Enumerable.Empty<T>()如果我没记错的话,这就是引擎盖下实际使用的内容.理论上你甚至可以这样做(IList<T>)Enumerable.Empty<T>()(虽然我认为没有理由这样做).
Ree*_*sey 23
您只需创建一个列表:
List<MyType> list = new List<MyType>();
Run Code Online (Sandbox Code Playgroud)
如果你想要一个空的IEnumerable<T>,请使用Enumerable.Empty<T>():
IEnumerable<MyType> collection = Enumerable.Empty<MyType>();
Run Code Online (Sandbox Code Playgroud)
如果你真的想要一个只读列表,你可以这样做:
IList<MyType> readonlyList = (new List<MyType>()).AsReadOnly();
Run Code Online (Sandbox Code Playgroud)
这将返回一个ReadOnlyCollection<T>实现的IList<T>.
IList<T> list = new List<T>().AsReadOnly();
Run Code Online (Sandbox Code Playgroud)
或者,如果你想要一个IEnumerable<>:
IEnumerable<T> sequence = Enumerable.Empty<T>();
Run Code Online (Sandbox Code Playgroud)
从.net 4.6开始,您还可以使用:
IList<T> emptyList = Array.Empty<T>();
Run Code Online (Sandbox Code Playgroud)
这仅为您指定为T的每个不同类型创建一个新实例.
| 归档时间: |
|
| 查看次数: |
14531 次 |
| 最近记录: |