C# 在Linq,为什么';t ToList()使用可选的谓词参数来筛选项?

C# 在Linq,为什么';t ToList()使用可选的谓词参数来筛选项?,c#,linq,C#,Linq,Linq库中的ToList方法没有提供可选的谓词参数来在生成新列表之前过滤集合,这有什么原因吗?此类电话的签名应为: //---------------------------------VVVVVV public static IEnumerable<TSource> ToList<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate); 这两个ToLi

Linq库中的ToList方法没有提供可选的谓词参数来在生成新列表之前过滤集合,这有什么原因吗?此类电话的签名应为:

//---------------------------------VVVVVV
public static IEnumerable<TSource> ToList<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
这两个
ToList
调用具有相同的效果:

var c1 = items.Where(i => i > 2).Count();
var c2 = items.Count(i => i > 2);
var list1 = items.Where(i => i > 2).ToList();
var list2 = items.ToList(i => i > 2);
我想知道这是不是故意的


编辑:对于那些投票认为这是基于意见的暂停,我不是在寻找一个基于意见的答案。我想知道设计师们是否有专门针对这一点提出过意见。我想知道这是否有类似的东西。

为什么
ToList
会接受过滤器?为什么它不接受像这样的选择器呢?为什么不呢

为什么这两件事应该是等价的:

items.Where(i => i > 2).ToList()
items.ToList(i => i > 2);
为什么不能是这样

items.Select(i => i * 2).ToList()
items.ToList(i => i * 2);


我希望你明白我想说的话。使用LINQ生成数据有很多不同的方法。LINQ是关于链接模块化方法,以满足您的需要,通常不会有太多的意见。将选择器添加到
ToList
会与此想法相冲突。

为什么
ToList
会接受过滤器?为什么它不接受像这样的选择器呢?为什么不呢

为什么这两件事应该是等价的:

items.Where(i => i > 2).ToList()
items.ToList(i => i > 2);
为什么不能是这样

items.Select(i => i * 2).ToList()
items.ToList(i => i * 2);


我希望你明白我想说的话。使用LINQ生成数据有很多不同的方法。LINQ是关于链接模块化方法,以满足您的需要,通常不会有太多的意见。将选择器添加到
ToList
会与此想法相冲突。

我能想到的原因之一是,在大多数情况下,
.ToList()
实际上会对数据库执行查询,通常最好将其作为LINQ链中的最后一个调用,因为您只想执行一次查询


如果您使用LINQ访问对象,那是因为LINQ的设计是对对象集合进行可组合查询。扩展方法
.ToList()
用于将计算出的筛选器(查询)转换为可以使用的对象集合。

我能想到的原因之一是在大多数情况下
.ToList()
将实际对数据库执行查询,通常最好将其作为LINQ链中的最后一个调用,因为您只想执行一次查询


如果您使用LINQ访问对象,那是因为LINQ的设计是对对象集合进行可组合查询。扩展方法
.ToList()
用于将计算出的筛选器(查询)转换为可以使用的对象集合。

因为您可以轻松创建自己的?或者只使用
Where(…).ToList()
?基本上,这些问题中的大多数可以简单地用“因为从来没有人觉得它是必要的,因此也没有人实现它”来回答。我真的想知道为什么
Count
会有重载,它接受谓词,而不是最佳的示例SRP@SergeyBerezovskiy当我在2015年第一次加入C#时,几个月后,我惊讶地发现我可以使用
Count
重载,而不是使用
x.Where(predicate.Count()
,这看起来更可读。因为你可以轻松创建自己的?或者只使用
Where(…).ToList()
?基本上,这些问题中的大多数可以简单地用“因为从来没有人觉得它是必要的,因此也没有人实现它”来回答。我真的想知道为什么
Count
会有重载,它接受谓词,而不是最佳的示例SRP@SergeyBerezovskiy当我在2015年第一次加入C#时,几个月后,我惊讶地发现我可以使用
Count
的重载,而不是使用
x.Where(谓词).Count()
看起来更具可读性。关于传递给
ToList
的委托含义不明确的优点可能值得一提的是,
Count
不存在这种混淆,因为我们知道它将返回一个
int
关于传递给的委托含义不明确的优点
ToList
可能值得一提的是,这种混淆不存在于
Count
中,因为我们知道它将返回一个
int