You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中初始化可枚举空列表,避免返回null?

正确初始化空List以避免枚举Null异常的几种方法

你提到的问题很典型——返回null集合确实是不良实践,会让调用方额外做null检查,还容易踩空引用的坑。咱们来一步步解决你的问题:

首先,为什么你之前的尝试会报错?Enumerable.Empty<TodoItem>()返回的是**IEnumerable<TodoItem>类型的空序列**,而不是List<TodoItem>,所以直接赋值或者强制类型转换都会失败(因为两者之间没有继承关系,强制转换自然会抛出运行时异常)。

下面是几种正确的实现方式:

1. 最直接:直接初始化空List

其实你最开始的第一行代码就已经是正确的空List初始化了!

var items = new List<TodoItem>();
// 后续如果REST服务没有返回数据,直接返回这个空List即可
return items;

这个new List<TodoItem>()创建的就是一个空的、可枚举的List,完全可以直接用foreach遍历,不会抛出异常。

2. 用Enumerable.Empty转成List

如果你习惯用Enumerable.Empty,可以通过ToList()方法将它转换成List类型:

var items = Enumerable.Empty<TodoItem>().ToList();

ToList()会把空的IEnumerable序列转换成一个空的List,这样赋值就不会有编译错误了。

3. 使用只读空List(.NET 5+)

如果你的空List不需要被修改,可以用List<T>.Empty获取一个预定义的只读空列表,性能更好(避免重复创建新的空List实例):

var items = List<TodoItem>.Empty;

注意这个是只读的,如果后续需要给列表添加元素,还是用前两种方法。

额外的最佳实践

在你的REST服务数据加载逻辑里,统一处理:

  • 如果服务返回数据,就把数据填充到List里返回
  • 如果服务没有返回数据(或者请求失败),直接返回空List(上面三种方式任意一种),而不是null

这样调用方的foreach代码可以完全去掉!= null的检查,直接放心遍历:

foreach (var i in items) {
    // 业务逻辑
}

内容的提问来源于stack exchange,提问作者Nimral

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:42:36