.net – 可以使用Reflection覆盖IEnumerable中的项目吗?

无视任何理智的理由,只是出于好奇
是否可以采用任何给定的IEnumerable(T)并覆盖包含的项目?例如,给定IEnuemrable(String)是否可以完全替换IEnumerable中的所有字符串?
最佳答案
正如其他人所说,如果IEnumerable是像List或Collection,Set等那样具体的东西,那么你可以在没有反射的情况下做到这一点 – 只需将其转换为该类型并弄乱它.

如果IEnumerable是使用迭代器生成的,例如:

public IEnumerable<int> EvenNumbers
{
    get
    {
        int i = 2;

        while (true)
        {
            yield return i;
            i += 2;
        }
    }
}

你怎么能达到这个并取代一些价值?没有要替换的值 – 下一个值来自循环的下一个评估.在任何地方都没有对这个Enumerable进行全面评估,你必须不断询问下一个值,直到得到你想要的东西.

所以不,你不能保证对于所有IEnumerables你可以挖掘并修改底层值,因为有时候没有底层值.

转载注明原文:.net – 可以使用Reflection覆盖IEnumerable中的项目吗? - 代码日志