我正在开发一个用 .NET 2.0 编写的库,该库具有一个返回类型列表对象的静态方法。
在单元测试期间,我遇到了一个鬼鬼祟祟的小错误,在与错误无关的行上抛出了一个异常。最终我发现这是这个列表返回 null 的结果。
为了防止这种情况,我看到返回这种类型集合的推荐方法是使用Enumerable.Empty<TResult>
. 但是,这需要 Linq (.NET 3.5 +)。
在这种情况下,有没有更好的方法(最佳实践?)返回 null 以外的集合?
- 是否有
Enumerable.Empty<T>()
.NET 2(非 Linq)等价物?
这是我尝试使用@EagleBeak 的建议:
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...
}
}
执行时会产生以下异常:
MethodReturnEmptyCollection.exe 中出现“System.InvalidCastException”类型的未处理异常
{“无法将
'System.Collections.Generic.List'1[MethodReturnEmptyCollection.ExampleItem][]' 类型的对象转换为 'System.Collections.Generic.List'1[MethodReturnEmptyCollection.ExampleItem]'。”}
更新:
在 EagleBeak 的输入之后,我发现这个问题回答了我的问题并且非常有趣:
使用 Enumerable.Empty() 而不是 new List 来初始化 IEnumerable 是否更好?
也发现了这个:
根据 Jon Skeet的说法,你也可以yield break
用来做同样的事情。