2

有没有一种巧妙的方法可以将List<int?>非空的地方变成List<int>没有循环的地方?

4

3 回答 3

7

您的代码中没有循环。这将根据问题的where 非空部分丢弃空值。

var values = given.Where(n => n.HasValue).Select(n => n.Value).ToList();
于 2012-11-08T22:49:06.433 回答
3

您可以使用空合并运算符

var result = myList.Select(x => x ?? default(int)).ToList(); 
于 2012-11-08T22:53:42.323 回答
2

不,没有参考守恒演员来做到这一点。List<int>并且List<int?>是不同的不兼容类型。

您需要创建一个副本,这意味着使用循环(直接或间接)。使用 LINQ 可以避免代码中的显式循环,但显然它仍然在内部使用循环。

于 2012-11-08T22:50:56.343 回答