今天我写了一些代码,它获取一个 A 类实例列表,并使用静态工厂方法创建一个 B 类实例列表:
public abstract class B
{
public static B CreateB(A a)
{
// return a new B instance or null if a B instance can't be created
}
}
我需要过滤掉空值,所以我使用 LINQ 来完成这两项任务:
var bList = aList.Select(a => B.CreateB(a)).Where(b => b != null).ToList();
代码按预期运行,但我注意到 Resharper 建议,在调用 CreateB 时,我应该“转换为方法组”。我想知道这意味着什么,并在这个网站上找到了一些有趣的答案。例如: 什么是 C# 中的方法组?以及 Asad 在此处对 stitty 的回答的评论Filtering Null values in Select (.Select(x => transform(x)) can be .Select(transform))
所以我将代码更改为:
var bList = aList.Select(B.CreateB).Where(b => b != null).ToList();
这也可以按预期工作,但现在我要回答我的问题了。Resharper 现在告诉我可以删除 Where lambda 表达式,因为 b != null “始终为真”。
我玩过,Resharper 是正确的,但为什么呢?为什么使用方法组时 Select() 的返回集合会有所不同?为什么当我使用方法组时 Select() 似乎会从集合中过滤掉空值?