接口应该使用IEnumerable <myobject>而不是MyObject [] </myobject>

时间:2012-08-18 13:41:12

标签: c# arrays ienumerable enumeration

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

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

到此:

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

如果我去改变所有这些,那么我随时都会收到其他警告。在我的函数里面的那个()上面有警告:

  Possible multiple enumeration of IEnumerable

我看到这个error description,但是在这里,这些已经是数组,因此不是自定义查询。

那么推荐做法是什么?我应该把它作为数组保存还是在整个地方添加.ToList()来删除多个可枚举的错误

1 个答案:

答案 0 :(得分:1)

“多枚举”不是错误,它是一个警告(如果我没有记错的话,重新锐化警告)。如果你确定你传递了“物化”集合(而不是懒散地获得的集合,例如通过yield return其结果的函数),你可以忽略它。

  • 如果将方法签名更改为使用IEumerable<MyObject>是有意义的,因为您想要传递各种LINQ函数的结果,请在方法中转换ToList
  • 如果除了数组之外还需要传递其他集合,请使用ICollection<MyObject>代替IEumerable<MyObject>
  • 如果转换完全出于审美原因,即您更改签名但继续传递数组,则可以完全忽略该警告。