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 的集合?
- 是否有
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...
}
}
执行时,产生如下异常:
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>
,而不是相反。
我正在开发一个用 .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 的集合?
- 是否有
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...
}
}
执行时,产生如下异常:
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>
,而不是相反。