如何在运行时将动态转换为未知 class
How to convert dynamic to unknown class in runtime
我有一个动态规则引擎,我想将 class 传递给它,每次发送 class 时都不同。
例如:
Order MyOrder = new Order()
{
OrderId = 1,
Customer = new Customer()
{
FirstName = "John",
LastName = "Doe",
Country = new Country()
{
CountryCode = "AUS"
}
},
Items = new List<Item>(){
new Item(){ ItemCode = "MM23", Cost=5.25M},
new Item(){ ItemCode = "LD45", Cost=5.25M},
new Item(){ ItemCode = "Test", Cost=3.33M},
}
};
我想改变这个:
var compiledRule = engine.CompileRule<Order>(rule);
至:
dynamic obj = MyOrder;
var compiledRule = engine.CompileRule<?????>(rule);
如何获取 obj 的类型并放置而不是“????”
我搜索了很多之后找到了解决方法
var engine = new MRE();
var compiledRule = engine.CompileRule<Order>(rule);
更改为:
var engine = new MRE();
var compiledRule = typeof(MRE).GetMethod("CompileRule").MakeGenericMethod(myOrder.GetType())
.Invoke(engine, new object[] { rule}) as dynamic;
我有一个动态规则引擎,我想将 class 传递给它,每次发送 class 时都不同。
例如:
Order MyOrder = new Order()
{
OrderId = 1,
Customer = new Customer()
{
FirstName = "John",
LastName = "Doe",
Country = new Country()
{
CountryCode = "AUS"
}
},
Items = new List<Item>(){
new Item(){ ItemCode = "MM23", Cost=5.25M},
new Item(){ ItemCode = "LD45", Cost=5.25M},
new Item(){ ItemCode = "Test", Cost=3.33M},
}
};
我想改变这个:
var compiledRule = engine.CompileRule<Order>(rule);
至:
dynamic obj = MyOrder;
var compiledRule = engine.CompileRule<?????>(rule);
如何获取 obj 的类型并放置而不是“????”
我搜索了很多之后找到了解决方法
var engine = new MRE();
var compiledRule = engine.CompileRule<Order>(rule);
更改为:
var engine = new MRE();
var compiledRule = typeof(MRE).GetMethod("CompileRule").MakeGenericMethod(myOrder.GetType())
.Invoke(engine, new object[] { rule}) as dynamic;