2010-08-09 21 views
2

我已將以下代碼簡化爲基本示例,但仍無法獲取要設置的值。當執行propertyInfo.SetValue()時,它會在我的Contact對象的setter上創建一個斷點,並在'setter'中正確設置該值。但是,執行SetValue()後,我的projectContact.Contact對象上的字符串屬性尚未更改爲「a」。任何想法,我可能在這裏做錯了嗎?無法獲取PropertyInfo.SetValue()來設置我的對象上的值

IEnumerable<ProjectContact> contacts = GetContactsByProject(projectId); 

     foreach (ProjectContact projectContact in contacts) 
     { 
      foreach (PropertyInfo propertyInfo in projectContact.Contact.GetType().GetProperties()) 
      { 
       if (propertyInfo.PropertyType == typeof(string)) 
       { 
        propertyInfo.SetValue(projectContact.Contact, "a", null); 
       } 
      } 
     } 

回答

7

我能想到的兩種可能性:

  1. 屬性setter沒有對物業正常工作。它可能會設置與屬性getter不同的字段,因此,當您設置屬性時,您實際上從未實際「設置」實際值。
  2. 如果「Contact」是一個結構體(值類型),projectCOntact.Contact將返回結構體的一個副本。這會阻止你改變「真實」的物體。
+0

是的,你釘了它!這是一個結構,而不是我的選擇:)今天學到了一些新東西! – JSprang 2010-08-09 19:14:42

4

讓我猜你的ProjectContact類型是struct

由於結構是按值傳遞的,因此您將該結構的副本的值設置爲0,然後將其丟棄。
這就是爲什麼可變結構是邪惡,應該不惜一切代價避免。

您應該將ProjectContact類型更改爲類。


這也有可能是你的setter中有一個bug。