【发布时间】:2015-02-19 16:07:10
【问题描述】:
public class Stuff
{
public int x;
// ... other stuff
}
我有一个IEnumerable<Stuff>,我想为集合中所有Stuff 对象的所有x 属性构建一个int[]。
我愿意:
IEnumerable<Stuff> coll;
// ...
var data = coll.Select(s => s.x).ToArray();
如果集合为空,我想要的是一个空数组而不是 int[0]。换句话说,如果!coll.Any(),那么我想要data = null。 (我实际需要的是coll是一个复杂的LINQ表达式的中间结果,我想在表达式链上做一个LINQ操作,而不是保存中间结果)
我知道在许多情况下int[0] 比null 更可取,但我存储了许多这样的结果,并且宁愿传递nulls 而不是空数组。
所以我目前的解决方案是这样的:
var tmp = coll.Select(s => s.x).ToArray();
int[] data = tmp.Any() ? tmp : null;
在不存储 tmp 的情况下有什么方法可以做到这一点?
编辑:主要问题是如何在不存储中间结果的情况下执行此操作。类似于NULLIF() 来自T-SQL 的东西,如果条件为假,您将返回您传入的内容,如果条件为真,则返回NULL。
【问题讨论】:
标签: c# linq linq-to-objects