問題

我可以做一個eval("something()");在JavaScript中動態執行程式碼.有沒有辦法讓我在C#中做同樣的事情?

我想要做的一個例子是:我有一個整數變數(比如i),我有多個屬性,名稱:“Property1”,“Property2”,“Property3”等. 現在,我想根據i的值在“Propertyi”屬性上執行一些操作.

這對Javascript來說非常簡單.有沒有辦法用C#做到這一點?

  最佳答案

不幸的是,C#不是這樣的動態語言.

但是,您可以做的是建立一個包含類和所有內容的 C# 原始碼檔案,並透過 C# 的 CodeDom 提供程式執行它並將其編譯成彙編,然後執行它。

MSDN上的這個論壇帖子包含一個答案,在頁面下面有些示例程式碼:
2001年12月31日終了的兩年期收入和支出及準備金和基金結餘變動報表 從字串建立匿名方法?

我很難說這是一個非常好的解決辦法,但無論如何都是可能的。

您將在該字串中期望什麼樣的程式碼?如果它是有效程式碼的一個小子集,例如只是數學表示式,可能存在其他替代方案.


編輯:好吧,這教我先徹底閱讀問題.是的,反思可以在這裡給你一些幫助.

如果您將字串拆分;首先,為了獲得個別屬性,您可以使用以下程式碼為類獲取特定屬性的PropertyInfo物件,然後使用該物件來操作特定物件。

 String propName = "Text";
PropertyInfo pi = someObject.GetType().GetProperty(propName);
pi.SetValue(someObject, "New Value", new Object[0]);
 

連結: PropertyInfo.SetValue Method

  相同標籤的其他問題

c#reflectionpropertiesc#-2.0