c# - 如何在没有 MethodInfo 的情况下使用 MSIL *调用实例上的方法?

标签 c# reflection dynamic-programming cil

我有一个类的一些属性,这些属性遵循特定的约定。例如。

Person1 { get; set; }
Person2 { get; set; }
Person3 { get; set; }

我不想在类的实例上获取 MethodInfo 对象,而是做这样的事情:

...
il.Emit(OpCodes.Callvirt, [instance]["set_Person" + index]);

上面的代码行是说明性的,而不是我认为应该的。

有谁知道我该怎么做?

最佳答案

这是做不到的,我不明白这一点或任何潜在的好处。 MSIL Callvirt 指令不采用描述调用内容的字符串,它采用指向特定类型的特定方法的元数据标记,通过反射获取该值的唯一方法是使用 MethodInfo 实例。

这看起来确实不是一个复杂的选择:

il.Emit(OpCodes.Callvirt, type.GetMethod("set_Person" + index));

关于c# - 如何在没有 MethodInfo 的情况下使用 MSIL *调用实例上的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12636566/

相关文章:

c# - 如何从 aspx 下拉列表中获取选定的值?

c# - ef core 2.0 使用包含过滤器搜索多列

c# - 预加载 .NET 程序集的好方法

algorithm - 动态规划和相互适合的矩形序列的最大长度

algorithm - 具有两个权重的背包算法

c# - 我如何尝试创建一个文件,并返回一个值来指示它是否已创建?

c# - 在 "using"语句中使用 yield 时,Dispose 何时发生?

Java反射: looking at the lines of code in a method?

java - 泛型 java 类中的反射

python - 优化此动态规划解决方案