如何在运行时将动态转换为未知 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;