c# - 对于可能多次枚举的内容使用 IEnumerable 是否安全?

标签 c# ienumerable enumeration

例如,假设我有以下内容:

public class StringTester
{
    IEnumerable<IStringConditional> Conditionals { get; }

    public StringTester(IEnumerable<IStringConditional> conditionals)
    {
        conditionals = Conditionals;
    }

    public bool TestString(string testString)
    {
        foreach (var conditional in Conditionals)
        {
            if (!conditional.Test(testString))
            {
                return false;
            }
        }

        return true;
    }
}

这被认为是安全的,还是 IEnumerable 类型仅对于单个枚举是安全的?如果不是,在这种情况下最好使用什么类型?

最佳答案

关于是否IEnumerable<T>未定义一般情况下是可重复的。经常(通常):确实如此。但是,存在以下示例:

  • 只能永远迭代一次(想想“来自套接字的数据”)
  • 可以迭代多次,但每次给出完全不同的数据(没有任何对应的明显状态突变)

所以:一般来说,我不建议多次迭代它除非您知道该场景是可重复的。像数组和列表这样的东西是可重复的(当然,如果数据发生变化,它们可能会发生变化以显示这些变化)。

关于c# - 对于可能多次枚举的内容使用 IEnumerable 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60621126/

相关文章:

c# - 什么在 F# 中容易而在 C# 中难?

c# - Task.Run 的替代方案

c# - 从接口(interface)继承的类中的列表 - 从类中添加到列表?

c# - 为什么这三段 LINQ 代码会产生不同(或错误)的结果?

c++ - 在开关情况下使用按位或运算符

c++ - 枚举结构的成员?

c# - 具有异步和等待的 MVC 操作

c# - 从 Razor 调用 C# 助手时是否会牺牲性能?

c# - 立即返回所有具有 yield return 的枚举;无需循环

c# - 如何在 C# 中验证值的集合是唯一的(不包含重复项)