【问题标题】:C# initialize list so not null if no items added如果没有添加项目,C# 初始化列表不为空
【发布时间】:2018-05-09 19:08:01
【问题描述】:

我有一个初始化列表的例程...

var items = new List<TodoItem>();
//... load items from a REST service ...
return items;

随后的例程尝试枚举列表...

foreach (var i in items)
{
    // ...
}

如果门户没有返回任何项目,则列表为null,并且尝试枚举它失败......原因已经讨论过。

到目前为止,我在枚举之前做了!= null 检查。现在我阅读了一篇 SO 帖子,其中有人建议在列表没有项目的情况下返回 null 是“不好的做法”。

如何将列表初始化为可以枚举的空列表,而不是让它成为null?我想到的唯一方法是像

这样的序列
var items = new List<TodoItem>();
items =  Enumerable.Empty<TodoItem>()

这不会编译:

无法将 System.Collections.Generic.IEnumerable 类型隐式转换为“System.Collections.Generic.List”。存在显式转换(您是否缺少演员表?)。

尝试使用显式强制转换 ...

items = (List<TodoItem>)Enumerable.Empty<TodoItem>();

因运行时异常“无效转换”而失败

谁能告诉我如何正确初始化我的列表?

【问题讨论】:

  • 我们需要知道... load items from a REST service ... 究竟是什么

标签: c# initialization generic-list


【解决方案1】:
var items = new List<TodoItem>();

创建一个空列表。完成。

如果您正在执行此操作并且它最终是 null,那么您的代码会将其设置为 null,而您还没有显示该代码。也许它与您的“从 REST 服务加载项目”代码有关?

【讨论】:

  • 感谢乔纳森,您的评论。深入研究门户代码(我认为这无关紧要,但实际上是问题所在),我发现了一个异常处理程序:catch (Exception ex) { await Application.Current.MainPage.DisplayAlert(nameof(GetTodoDataAsync), "Error:" + ex.Message, "OK");返回空值;这就是 null 的来源。
猜你喜欢
  • 1970-01-01
  • 2011-08-09
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多