关于 C#的 nullable 类型问题

2021-05-08 19:29:54 +08:00
 zxCoder
public IEnumerable<Tuple> Iterator() {
   return Tuples.Where(t => t != null);
}

这个代码,其中 Tuples 是一个 Tuple?[]的类型,然后这里 IDE 提示我 Tuples.Where(t => t != null)这个代码返回的是 IEnumerable<Tuple?>而不是 IEnumerable<Tuple>

有什么办法可以返回 IEnumerable<Tuple>吗

681 次点击
所在节点    问与答
3 条回复
CitizenR
2021-05-08 20:26:30 +08:00
```
return Tuples.Where(t => t != null).Cast<int>();
```
CitizenR
2021-05-08 20:30:20 +08:00
勘误:

`return Tuples.Where(t => t != null).Cast<Tuple>();`
geelaw
2021-05-08 20:51:30 +08:00
如果 Tuple 是引用类型且 Tuple? 是指可空上下文里的可空引用标记,则不需要实质的转换,只需要重新标注。

如果 Tuple 是值类型,则

return Tuples.Where(t => t.HasValue).Select(t => t.GetValueOrDefault());

进一步,如果 Tuples 只是普通对象,直接写循环比较快:

foreach (var t in Tuples)
if (t.HasValue)
return t.GetValueOrDefault();

每个元素省下了 1-2 次委托调用和 2-4 次接口调用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/775731

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX