方法使用复杂参数动态调用 (C#)
本文关键字:调用 动态 参数 复杂 方法 | 更新日期: 2023-09-27 18:30:26
我想在class1 dynamically
中调用method1
。我不想直接使用Prm class
。如何发送p parameter dynamically
.这是一种方法,但我无法管理
namespace WindowsFormsApplicationMethodCall
{
public class Prm
{
public string p1 { get; set; }
public long p2 { get; set; }
}
public class Class1
{
public string Method1(Prm p)
{
return "Hello world";
}
}
}
用法:
private void button1_Click(object sender, EventArgs e)
{
var ass = Assembly.LoadFrom("abc.dll");
var business = ass.CreateInstance("WindowsFormsApplicationMethodCall.Class1");
var mInfo = business.GetType().GetMethod("Method1");
var anonymParameter = new { p1 = "", p2 = 2 };
mInfo.Invoke(business,new object[]{ anonymParameter});
//var res = mInfo.TolerantCast(new { p1 = "", p2 = 2 });
//var param = new Dictionary<string,object>();
//param.Add("p", result);
}
我发现了这个错误:无法转换为类型的对象 <>f__AnonymousType0`2[System.String,System.Int32]
从类 "prm" 创建实例并改用它
var anonymParameter = new { p1 = "", p2 = 2 };
自
var anonymParameter = ass.CreateInstance("WindowsFormsApplicationMethodCall.Prm");
anonymParameter.GetType().GetProperty("p1").SetValue(anonymParameter,"");
anonymParameter.GetType().GetProperty("p2").SetValue(anonymParameter,2);
你需要传递一个类型为 Prm
的对象:
var parameter = new Prm { p1 = "", p2 = 2 };
mInfo.Invoke(business,new object[]{ parameter });