我很好奇是什么限制必须让设计决定不让HashSet能够使用LINQ的ForEach查询.
这两种实现的幕后实际情况有何不同:
var myHashSet = new HashSet<T>;
foreach( var item in myHashSet ) { do.Stuff(); }
Run Code Online (Sandbox Code Playgroud)
VS
var myHashSet = new HashSet<T>;
myHashSet.ForEach( item => do.Stuff(); }
Run Code Online (Sandbox Code Playgroud)
我(非常)确定这只是因为HashSet没有实现IEnumerable - 但是正常的ForEach循环做什么不同会使HashSet更多地支持它?
谢谢
LINQ没有ForEach
.只有List<T>
班级有一个ForEach
方法.
值得注意的是,HashSet 确实可以实现IEnumerable<T>
.
请记住,LINQ代表语言集成查询.它用于查询数据集合.ForEach
与查询无关.它只是循环数据.因此它确实不属于LINQ.
LINQ 旨在查询数据,我猜它会被避免ForEach()
,因为它有可能改变数据,从而影响数据的查询方式(即,如果您更改了影响哈希码或相等性的字段)。
List<T>
您可能对有一个ForEach()
?的事实感到困惑。
当然,编写一个很容易,但由于上述问题,应谨慎使用......
public static class EnumerableExtensions
{
public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
if (source == null) throw new ArgumentNullException("source");
if (action == null) throw new ArgumentNullException("action");
foreach(var item in source)
{
action(item);
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7508 次 |
最近记录: |