枚举多次的.Net方法应接受哪种类型的集合作为参数?

Ily*_*dik 2 .net c# enumerable

我有一个简单的方法是这样的:

private void CalculateTotals(IEnumerable<MyData> data)
{
   decimal value1 = data.Sum(d => d.Value1);
   decimal value2 = data.Sum(d => d.Value2);
}
Run Code Online (Sandbox Code Playgroud)

这可以正常工作,并允许传入任何类型的集合,但是这也将执行多个数据枚举,而这可能也非常昂贵。

现在,我可以将参数的类型更改为,ICollection<MyData>但这意味着调用者不知道该方法是否可以/将更改集合,因为可以对其进行调用Add/Remove

我的下一个猜测IReadonlyCollection<MyData>似乎是最合适的,但这意味着每个调用者都必须创建/转换为new ReadonlyCollection

.net中是否有解决此问题的“首选”方法?

Cod*_*ter 5

我的下一个猜测IReadonlyCollection<MyData>似乎是最合适的,但这意味着每个调用者都必须创建/转换为new ReadonlyCollection

好吧,因为各种内置类型都实现了该接口

但是相反,您可能要防止双重枚举。