可以使用Reflection覆盖IEnumerable <T>中的项目吗?

SFu*_*n28 3 .net reflection .net-4.0 .net-2.0

无视任何理智的理由,只是出于好奇,

是否有可能采取任何给定的IEnumerable(T)并覆盖所包含的项目?例如,给定IEnuemrable(String)是否可以完全替换IEnumerable中的所有字符串?

Nia*_*ton 5

正如其他人所说,如果IEnumerable是像List或Collection,Set等那样具体的东西,那么你可以在没有反射的情况下做到这一点 - 只需将其转换为该类型并将其弄乱.

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

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

        while (true)
        {
            yield return i;
            i += 2;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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