gpt4 book ai didi

c# - 使用反射查找枚举器的方法

转载 作者:太空宇宙 更新时间:2023-11-03 22:29:24 25 4
gpt4 key购买 nike

背景:

我正在使用 Harmony Library 修改现有代码.现有的 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

最佳答案

MoveNext未在 IEnumerator<T> 上定义, 但在非泛型上 IEnumeratorIEnumerator<T> 继承.

接口(interface)继承结合反射有点奇怪,所以你需要直接从定义它的基接口(interface)获取方法信息:

MethodInfo targetMethod = typeof(System.Collections.IEnumerator).GetMethod("MoveNext");

关于c# - 使用反射查找枚举器的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58887569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com