gpt4 book ai didi

c# - 接口(interface)应该使用 IEnumerable 而不是 MyObject[]

转载 作者:行者123 更新时间:2023-11-30 17:58:39 27 4
gpt4 key购买 nike

我有很多 resharper 警告将我的参数从常规数组更改为相同类型的 IEnumerable,所以它会改变这个:

 public Interface IGenerator
{
void Go(MyObject[] objects)
}

为此:

 public Interface IGenerator
{
void Go(IEumerable<MyObject> objects)
}

如果我去更改所有这些,那么在我调用函数中的 .Where() 时,我会随时收到其他警告,并带有警告:

  Possible multiple enumeration of IEnumerable

我看到这个 error description但在这里这些已经是数组,所以不是延迟查询。

那么这里推荐的做法是什么?我应该将其保留为数组还是在各处添加 .ToList() 以删除多个可枚举错误

最佳答案

“多次枚举”不是错误,是警告(再尖锐的警告,如果我没记错的话)。如果您确定传递的是“物化”集合(与懒惰获得的集合相反,例如通过 yield return 是其结果的函数),则可以忽略它。

  • 如果将方法签名更改为取 IEumerable<MyObject>这是有道理的,因为你想传递各种 LINQ 函数的结果,然后转换 ToList在你的方法中。
  • 如果除了数组还需要传递其他集合,使用ICollection<MyObject>而不是 IEumerable<MyObject> .
  • 如果转换纯粹是出于美观原因,即您更改签名但继续传递数组,则可以完全忽略警告。

关于c# - 接口(interface)应该使用 IEnumerable<MyObject> 而不是 MyObject[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12019052/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com