首页 > 后端开发 > C++ > 如何避免 C# 中的'可能的 IEnumerable 多重枚举”警告?

如何避免 C# 中的'可能的 IEnumerable 多重枚举”警告?

Linda Hamilton
发布: 2025-01-04 14:48:40
原创
716 人浏览过

How Can I Avoid the

处理 IEnumerable 多重枚举的危险

在使用 IEnumerable 集合时,开发人员经常会遇到警告“Possible multiple enumeration of IEnumerable” ,”当集合被迭代多次时就会出现。这个问题可能会产生问题,特别是在处理某些类型的集合时,例如代表数据库查询或其他昂贵操作的集合。

考虑以下代码片段:

public List<object> Foo(IEnumerable<object> objects)
{
    if (objects == null || !objects.Any())
        throw new ArgumentException();

    var firstObject = objects.First();
    var list = DoSomeThing(firstObject);        
    var secondList = DoSomeThingElse(objects);
    list.AddRange(secondList);

    return list;
}
登录后复制

一种方法避免多重枚举警告的方法是修改方法参数以接受List;而不是 IEnumerable。但是,这种方法可能并不总是可行,特别是如果您希望保留对集合中最高对象的访问权限。

另一种选择是在方法开头将 IEnumerable 转换为 List:

public List<object> Foo(IEnumerable<object> objects)
{
    var objectList = objects.ToList();
    // ...
}
登录后复制

虽然这种技术可以有效地防止警告,但它可能会让人感到尴尬和不必要的冗长。

理解的关键这个问题在于方法签名所传达的语义。传递 IEnumerable 参数意味着调用者预计该方法仅枚举该集合一次。通过接受 IList 或 ICollection,您可以向调用者明确传达您对集合的期望,从而减少误解和代价高昂的错误的风险。

在必须使用 IEnumerable 的情况下,建议执行 ToList( ) 转换在方法的开头。这可以确保后续迭代不会遇到多重枚举警告。

不幸的是,.NET 没有提供一个接口来封装 IEnumerable、Count 和索引器的功能,而无需添加或删除方法。这样的界面将大大简化这个问题,并提供更清晰、更简洁的解决方案。

以上是如何避免 C# 中的'可能的 IEnumerable 多重枚举”警告?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板