2010-12-02 67 views
0

我有下面的類結構(僞)在類的屬性:設置的對象上的字段是使用反射在.NET

Class A 
{ 
    Property string Who; 
    Property string Where; 
} 

Class B 
{ 
    Property A Information; 
} 

Class C 
{ 
    Property String Who; 
} 

我試圖找出如何設置使用設置B.A.Who = C.Who .NET 4.0中的反射。

謝謝!

回答

3

嗯,這並不是所有難以做到的,但如果你想要參數驗證,優雅的錯誤處理等,會變得非常麻煩。下面是一個應該突出顯示技術的例子(no支票):

static void SetBsAsWhoToCsWho(object b, object c) 
{ 
    // csWho = c.Who 
    object csWho = c.GetType().GetProperty("Who").GetValue(c, null); 

    // a = b.Information 
    object a = b.GetType().GetProperty("Information").GetValue(b, null); 

    // a.Who = csWho 
    a.GetType().GetProperty("Who").SetValue(a, csWho, null); 
} 

您需要在上述代碼中進行各種檢查才能使其健壯。如果您可以告訴我們,那麼爲什麼想要使用反射來完成此任務會非常有幫助。根據情況,可能會有更合適的解決方案,例如:

  1. 顯而易見的類型安全代碼。
  2. 根據需要投射,然後輸入類型安全的代碼。
  3. 通過構建和編譯表達式樹來生成委託。
  4. 使用dynamic
  5. AutoMapper和其他庫。