在CoreCLR中键入.InvokeMember(.)

本文关键字:InvokeMember CoreCLR | 更新日期: 2023-09-27 18:22:21

我正试图使用CoreCLR动态调用特定类型上的成员,但在针对DNXCORE50进行编译时,type.InvokeMember方法不可用。然而,如果我针对DNX451进行编译,它可以正常工作。

以下是如何使用DNX451实现这一点的示例,但我如何在DNXCORE50中做到这一点?

using System;
using System.Reflection;
namespace InvokeMember
{
    public class Program
    {
        public void Main(string[] args)
        {
            typeof (Program).InvokeMember("DoStuff", BindingFlags.InvokeMethod, null, new Program(), null);
        }
        public void DoStuff()
        {
            Console.WriteLine("Doing stuff");
        }
    }
}

在CoreCLR中键入.InvokeMember(.)

使用此代码,它可以工作:

        MethodInfo method = typeof(Program).GetTypeInfo().GetDeclaredMethod("DoStuff");
        method.Invoke(new Program(), null);

对于任何可能将Type.InvokeMember()与BindingFlags.SetProperty一起使用来设置对象(而不是BindingFlags.InvokeMethod)的属性的人,您可以使用此语法,该语法与@aguetat:给出的答案略有修改

PropertyInfo property = typeof(Program).GetTypeInfo().GetDeclaredProperty("MyProperty");
property.SetValue(new Program(), newValue);