2014-12-02 30 views
0

說,我有一個類的用戶有(字符串名字,列表兄弟) 我想修改用戶的屬性。使用反射修改字符串列表

我們假設我想用b替換字符串而不是a。

用戶:{ 姓:「狂怒」, 兄弟姐妹:{ 「斯大林」, 「馬克思」 }}

使用反射我需要讀取各個串和以下將是輸出目的。

用戶:{ 姓: 「Rbger」, 兄弟姐妹:{ 「stblin」, 「Mbrx」 }}

讓我們看看下面的函數

private object modifyObject(object t){ 
    foreach(var propertyInfo in t.GetType.GetProperties(){ 
     var stringToBeModified = propertyInfo.GetValue(t,null); 
     propertyInfo.SetValue(t, stringToBeModified.replace("a","b"),null) 
    } 
} 

上面的代碼工作罰款時修改firstName。但不知道如何修改兄弟姐妹中的字符串。

我想我會利用第三個屬性(索引屬性的可選索引值)。但它看起來像整個財產沒有索引。 爲同胞,propertyInfo.GetValue(t,null)給出2個字符串。

[0] -- stalin 
[1] -- Marx. 

誰能告訴我怎麼可以讓使用propertyInfo.GetValue後的值修改上面的2串(T,NULL)?

回答

1

可以簡單地投值作爲List<string>和更新所期望

例如

List<string> list = (List<string>)propertyInfo.GetValue(t,null); 
list[0] = list[0].replace("a","b"); 

上述樣品是假設兄弟姐妹是List<string>類型的的PropertyInfo,根據需要可能會調整。

+0

我可以有一個動態類型。說propertyInfo.GetValue(t,null)可以返回一個int列表或者字符串列表或者bool列表。在那種情況下,我該怎麼做呢? – Bala 2014-12-02 05:09:10

+0

@Bala,因爲int,string和bool不相互兼容,你可能沒有共同的邏輯來處理它們。您可以檢查屬性類型並有條件地執行代碼。請參閱[PropertyInfo.PropertyType](http://msdn.microsoft.com/en-us/library/system.reflection.propertyinfo.propertytype(v = vs.110).aspx) – pushpraj 2014-12-02 09:13:33

+0

感謝Pushpraj,它的工作。 – Bala 2014-12-15 07:08:38