2011-02-10 61 views
1

我試圖從NameValueCollection更新已知類型MyClass的公共參數(請參閱下面的代碼)。這是可能的MVC3,Controller類有一個UpdateModel方法,這與Request.Params完全這樣做。不過,我想在Controller以外這樣做。如何更新來自NameValueCollection(或類似的)的對象參數?

有什麼想法?

public class MyClass 
{ 
    public string MyParam { get; set; } 
} 

...

var values = new NameValueCollection() { { "MyParam", "any string value for my param" } }; 
var myInstance = new MyClass(); 
Update(myInstance, values); 

乾杯, 牛逼

回答

2

你應該使用反射來執行此任務:

此代碼提供沒有正確驗證,它應該投入一種方法。

var type = myInstance.GetType(); 
foreach(var keyValue in values) 
{ 
    type.InvokeMember(keyValue.Key,BindingFlags.SetProperty,null,myInstance, new object[]{keyValue.Value});  

} 

這段代碼可能有錯誤,但即使是這樣,一般的想法也在這裏。 2備註:如果MyClass上不存在該屬性,或者該屬性類型不能從字符串中分配,則此代碼將慘敗。因此它需要適當的驗證(我知道,我正在重複自己)。

您也可以使用表達式樹來執行作業,特別是如果您在相同的已知類型上設置了很多值,因爲可以編譯表達式樹。

相關問題