C# 使用反射修改字符串列表

C# 使用反射修改字符串列表,c#,string,list,reflection,C#,String,List,Reflection,比如说,我有一个类用户,它有(字符串FirstName,列出兄弟姐妹) 我想修改用户的属性 假设我想用b代替a来替换字符串 用户:{ 名字:“Rager”, 兄弟姐妹:{ “斯大林”, “马克思” }} 使用反射,我需要读取单个字符串,下面是输出对象 用户:{ 名字:“Rbger”, 兄弟姐妹:{ “stblin”, “Mbrx” }} 让我们考虑下面函数 private object modifyObject(object t){ foreach(var propertyInfo in

比如说,我有一个类用户,它有(字符串FirstName,列出兄弟姐妹) 我想修改用户的属性

假设我想用b代替a来替换字符串

用户:{ 名字:“Rager”, 兄弟姐妹:{ “斯大林”, “马克思” }}

使用反射,我需要读取单个字符串,下面是输出对象

用户:{ 名字:“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(t,null)获取值后,如何修改上述两个字符串

您只需将值强制转换为
列表
,然后根据需要进行更新

乙二醇

List List=(List)propertyInfo.GetValue(t,null);
列表[0]=列表[0]。替换(“a”、“b”);

上面的示例假设同级的属性信息为
List
,您可以根据需要进行调整。

我可以拥有一个动态类型吗。GetValue(t,null)可以返回int列表、string列表或bool列表。在这种情况下,我如何进行转换?@Bala,因为int、string和bool彼此不兼容,您可能没有处理所有这些的通用逻辑。您可以检查属性类型并有条件地执行代码。看见
List<string> list = (List<string>)propertyInfo.GetValue(t,null);
list[0] = list[0].replace("a","b");