2012-03-02 56 views
1

在C#中,假設我有以下對象:在.NET中如何根據對象動態評估複雜表達式?

var myObject = new 
{ 
    Val = new[] 
    { 
     new { ArrVal = "three1"}, 
     new { ArrVal = "three2"} 
    } 
}; 

我將如何動態評估對物體下面的表達式? (表達式是一個字符串

"Val[1].ArrVal" 

在這種情況下,我希望表達返回「three2」。我想寫出具有以下簽名的方法:

object GetValue(string expression, object objectToExtractValueFrom) 

我可以用dynamic關鍵字做到這一點與反思,或以某種方式?

+0

你能發表用例? – Simon 2012-03-02 10:12:36

回答

2

你不能用反射或動態關鍵字來做它。你可以做的是:

  1. 解析字符串,以創建 將被編譯並針對您的參數(S)
  2. 使用的CodeDOM
  3. 使用像IronRuby的一些動態語言執行的lambda表達式樹或IronPython的
+0

+1雖然即使使用python和ruby字符串評估也是一件壞事。 – Simon 2012-03-02 10:12:08

+0

在我看來,這取決於這個字符串從哪裏來。它不應該來自用戶,這是肯定的。畢竟,字符串評估就是問題所在。感謝您的加分。從用戶 – 2012-03-02 10:16:15

+0

這將是一個戲劇性的安全問題。否則,它通常是一個糟糕的設計。 – Simon 2012-03-02 10:18:52