背景:
我正在使用Harmony库修改现有代码。现有的C#代码遵循以下结构:
public class ToModify
{
public override void Update()
{
foreach (StatusItemGroup.Entry entry in collection)
{
// I am trying to alter an operation at the end of this loop.
}
}
}
public class StatusItemGroup
{
public IEnumerator<Entry> GetEnumerator()
{
return items.GetEnumerator();
}
private List<Entry> items = new List<Entry>();
public struct Entry { }
}
因为现实情况,我必须修改正在生成的IL代码,为此我必须获得目标操作数的MethodInfo
。这是目标:
IL_12B6: callvirt instance bool [mscorlib]System.Collections.IEnumerator::MoveNext()
问题:
如何获取枚举器的MoveNext
方法的MethodInfo
?
我尝试过的:
我想到了所有可能的方法,但都返回null
。这是我最基本的尝试:
MethodInfo targetMethod = typeof(IEnumerator<StatusItemGroup.Entry>).GetMethod("MoveNext");
我不明白为什么这个不能用,也不知道该如何正确获取
MethodInfo
。
MethodInfo targetMethod = typeof(IEnumerator<>).GetMethod("MoveNext");
?按照你的写法,会报错:Using the generic type 'IEnumerator<T>' requires 1 type arguments
。但是,如果我按照我的方式写,它仍然会返回 null。 - AzeIEnumerator
需要using System.Collections
。谢谢。 - Aze