在C#中,当一个用法在基础构造函数调用中时,如何解决多个枚举警告?

srm*_*srm 2 c# ienumerable base

以下代码给出了关于IEnumerable可能多次枚举的警告:

public ClassName(IEnumerable<OtherClassName> models) : base(models)
{
    _models.AddRange(models);
}
Run Code Online (Sandbox Code Playgroud)

由于"基本"调用,删除此警告的常规解决方案不起作用.我无法转换为列表,因为没有地方存储该列表.

我唯一的选择是让构造函数将列表作为参数吗?在这种情况下,这是推荐的做法吗?

Mar*_*zek 6

创建另一个私有构造函数,List<OtherClassName>使用this关键字获取并调用它:

public ClassName(IEnumerable<OtherClassName> models)
    : this(models.ToList())
{
}

private ClassName(List<OtherClassName> models)
    : base(models)
{
    _models.AddRange(models);
}
Run Code Online (Sandbox Code Playgroud)

并确保你真的需要models在你的班级存储.也许它已经存储在base课堂上你可以从那里使用它?