使用IEnumerable进行多次枚举是否安全?

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

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类型仅对单个枚举安全?如果不是,在这种情况下最好使用哪种类型?

xinshiye111 回答:使用IEnumerable进行多次枚举是否安全?

在一般情况下,IEnumerable<T>是否可重复未定义。通常(通常):是。但是,存在以下任一示例:

  • 只能永远进行一次迭代(请考虑“来自套接字的数据”)
  • 可以重复很多次,但是每次都给出完全不同的数据(没有任何相应的明显的状态突变)

因此:通常,我不建议对其进行多次迭代,除非您知道该场景是可重复的。。数组和列表之类的东西是可重复的(当然,如果数据发生更改,它们可能会更改以显示这些更改)。

,

它应该是安全的,但可能不是最佳选择。魔鬼在实现中。

IEnumerable调用GetEnumerator()返回一个实现IEnumerator函数的Reset()

此功能的实现方式可能会引起一些问题。如果您要枚举一个调用Reset()的数组,只需将其内部指针设置为-1即可准备再次枚举。

如果要枚举通过网络连接的内容,则可能必须重做整个连接过程,然后再次查询数据,如果使用多次,则数据将更长且次优。

本文链接:https://www.f2er.com/2670216.html

大家都在问