public IEnumerable<Tuple> Iterator() {
return Tuples.Where(t => t != null);
}
这个代码,其中 Tuples 是一个 Tuple?[]的类型,然后这里 IDE 提示我 Tuples.Where(t => t != null)这个代码返回的是 IEnumerable<Tuple?>而不是 IEnumerable<Tuple>
有什么办法可以返回 IEnumerable<Tuple>吗
1
CitizenR 2021-05-08 20:26:30 +08:00
```
return Tuples.Where(t => t != null).Cast<int>(); ``` |
2
CitizenR 2021-05-08 20:30:20 +08:00
勘误:
`return Tuples.Where(t => t != null).Cast<Tuple>();` |
3
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 次接口调用。 |