2017-12-02 3 views
-2

Ich habe eine dynamische Regel-Engine, und ich möchte Klasse übergeben und jedes Mal, wenn die Klasse anders gesendet wird.So konvertieren Sie dynamische in unbekannte Klasse in der Laufzeit

Zum Beispiel:

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}, 
    } 
}; 

Ich möchte, dies ändern:

var compiledRule = engine.CompileRule<Order>(rule); 

zu:

dynamic obj = MyOrder; 
var compiledRule = engine.CompileRule<?????>(rule); 

wie kann ich Typen von obj bekommen und statt „?? setzen ?? "

+2

Für den Fall, das ist ein XY-Problem (https://meta.stackexchange.com/questions/66377/ Was-ist-das-xy-Problem) kannst du einen Schritt zurück machen und erklären ** warum ** brauchst du das? – mjwills

Antwort

0

Ich fand Lösung nach vielen

var engine = new MRE(); 
var compiledRule = engine.CompileRule<Order>(rule);  

Änderung suchen:

var engine = new MRE();  
var compiledRule = typeof(MRE).GetMethod("CompileRule").MakeGenericMethod(myOrder.GetType()) 
         .Invoke(engine, new object[] { rule}) as dynamic; 
Verwandte Themen