C# 2.0 空集合

C# 2.0 Empty Collection

我正在开发一个用 .NET 2.0 编写的库,它有一个静态方法,return是一个列表类型的对象。

在单元测试期间,我遇到了一个偷偷摸摸的小错误,即在与错误无关的行上抛出异常。最终我发现这是这个列表 returning null 的结果。

为了防止出现这种情况,我看到了recommended way to return this type of collection is to use Enumerable.Empty<TResult>。但是,这需要 Linq (.NET 3.5 +)。

在这种情况下,是否有更好的方法(最佳实践?)return 一个非 null 的集合?


这是我尝试使用@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... 
    }
}

执行时,产生如下异常:

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]'."}


更新:

经过 EagleBeak 的输入,我发现这个问题回答了我的问题,很有趣:
Is it better to use Enumerable.Empty() as opposed to new List to initialize an IEnumerable?

也发现了这个:
According to Jon Skeet,你也可以用yield break做同样的事情。

只需丢弃两个私有方法并在构造函数中初始化您的列表,如下所示:

MyCustomList = new List<ExampleItem>();

PS:Enumerable.Empty<T> 无论如何都不适合你。 List<T> 实现 IEnumerable<T>,而不是相反。