在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");
}
}
}
使用此代码,它可以工作:
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);