C# 2.0 Empty Collection
我正在开发一个用.NET 2.0编写的库,它有一个静态方法,该方法返回一个List类型的对象。
在单元测试期间,我遇到了一个狡猾的小bug,其中一个异常被抛出到一条与错误无关的线上。最终我发现这是这个列表返回空值的结果。
为了防止出现这种情况,我认为返回这种类型集合的建议方法是使用
- 是否有一个
Enumerable.Empty net 2(非linq)等价物?()
以下是我尝试使用@eaglebag的建议:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | namespace MethodReturnEmptyCollection { public partial class Form1 : Form { private static List<ExampleItem> MyCustomList = null; public Form1() { InitializeComponent(); MyCustomList = CreateEmptyListOfExampleItems(); } private static List<ExampleItem> CreateEmptyListOfExampleItems() { // Throws an invalid cast exception... return (List<ExampleItem>)GetEmptyEnumerable<List<ExampleItem>>(); } public static IEnumerable<T> GetEmptyEnumerable<T>() { return new T[0]; } } public class ExampleItem { // item properties... } } |
执行时,将生成以下异常:
An unhandled exception of type 'System.InvalidCastException' occurred in
MethodReturnEmptyCollection.exe{"Unable to cast object of type
'System.Collections.Generic.List'1[MethodReturnEmptyCollection.ExampleItem][]' to type
'System.Collections.Generic.List'1[MethodReturnEmptyCollection.ExampleItem]'."}
更新:
在Eaglebag的输入之后,我发现这个问题回答了我的问题,并且非常有趣:相对于新列表,使用Enumerable.Empty()初始化IEnumerable更好吗?
发现了这一点:根据乔恩·斯基特的说法,你也可以用
只需丢弃这两个私有方法并在构造函数中初始化您的列表,如下所示:
附言:不管怎样,江户十一〔一〕也不会为你工作。