在使用PropertyInfo的GetValue获取值的时候
发现GetValue返回的值是一个List<T>类型。
此时我没办法读取出这个List<T>的内容。
例子代码如下class Program
{
static void Main(string[] args)
{
List<ClassB> family = new List<ClassB>();
family.Add(new ClassB("张一", "M"));
family.Add(new ClassB("张二", "M")); List<ClassA> Data = new List<ClassA>();
Data.Add(new ClassA("张三", family));
ReadClass(Data);
} public static void ReadClass<T>(List<T> Data)
{
foreach (object obj in Data)
{
PropertyInfo[] oProps = obj.GetType().GetProperties();
foreach (PropertyInfo p in oProps)
{
//这里输出ClassA的Name是没问题的。
//但是family在ClassA中是一个List此处程序会报错,所以用一个IF跳过。
//请高手指教一下怎么在这各种情况下获取family这个List的值
if (p.PropertyType.Name != System.Type.GetType("System.Collections.Generic.List`1").Name)
{
string sTmp = p.Name + ":" + p.GetValue(obj, null);
Console.WriteLine(sTmp);
}
else
{
//List<T>的处理方式
} } }
}
}
class ClassA
{
public ClassA(string Name,List<ClassB> family)
{
this.Name = Name;
this.family = family;
}
public string Name { set; get; }
public List<ClassB> family { set; get; }
} class ClassB
{
public ClassB(string Name, string Gerder)
{
this.Name = Name;
this.Gender = Gender;
} public string Name {set;get;}
public string Gender {set;get;}
}
发现GetValue返回的值是一个List<T>类型。
此时我没办法读取出这个List<T>的内容。
例子代码如下class Program
{
static void Main(string[] args)
{
List<ClassB> family = new List<ClassB>();
family.Add(new ClassB("张一", "M"));
family.Add(new ClassB("张二", "M")); List<ClassA> Data = new List<ClassA>();
Data.Add(new ClassA("张三", family));
ReadClass(Data);
} public static void ReadClass<T>(List<T> Data)
{
foreach (object obj in Data)
{
PropertyInfo[] oProps = obj.GetType().GetProperties();
foreach (PropertyInfo p in oProps)
{
//这里输出ClassA的Name是没问题的。
//但是family在ClassA中是一个List此处程序会报错,所以用一个IF跳过。
//请高手指教一下怎么在这各种情况下获取family这个List的值
if (p.PropertyType.Name != System.Type.GetType("System.Collections.Generic.List`1").Name)
{
string sTmp = p.Name + ":" + p.GetValue(obj, null);
Console.WriteLine(sTmp);
}
else
{
//List<T>的处理方式
} } }
}
}
class ClassA
{
public ClassA(string Name,List<ClassB> family)
{
this.Name = Name;
this.family = family;
}
public string Name { set; get; }
public List<ClassB> family { set; get; }
} class ClassB
{
public ClassB(string Name, string Gerder)
{
this.Name = Name;
this.Gender = Gender;
} public string Name {set;get;}
public string Gender {set;get;}
}
解决方案 »
- Process 运行外部程序的问题
- C#访问linux
- datagridview自动排序问题
- UltraTextEditor重写WndProc无法捕获编辑相关的消息
- XML 结点问题,请教!
- 如果C#中调用了API函数 这个函数会执行相应操作吗?
- 反射相关的问题:关于通过某一个Class获取同个名称空间下的其它Class
- vista下vs2005 windows mobile 开发怎么样?
- 请教各位怎样判断一个变量的类型,谢谢!
- 谁能帮我看一下这段代码有什么问题?关于DataGrid的数据绑定!
- 用字符串调用方法
- C# winform 中。 在通过ImportDll后 怎么知道导入的这个DLL里面有什么方法啊。。 怎么确定要从写哪个? 高手指教!!!
List<ClassB> listB = (p.GetValue(obj, null) as List<ClassB>);
foreach (var b in listB)
{
Console.WriteLine("Name:" + b.Name + " Gender:" + b.Gender);
}
{
ReadClass((List<ClassB>)p.GetValue(obj, null));
}
else
{
string sTmp = p.Name + ":" + p.GetValue(obj, null);
Console.WriteLine(sTmp);
}
2:对于楼主的需求,给出一个稍微简单的例子作为参考/// <summary>
/// 返回相信信息
/// </summary>
/// <returns></returns>
public static string GetPropertyInfo()
{
Student stu1 = new Student { ID = 1001, Code = "S001", Name = "谌豹" };
Student stu2 = new Student { ID = 1002, Code = "S002", Name = "郑巧玲" };
List<string> results = new List<string>();
string result=string.Empty; System.Reflection.PropertyInfo[] pros = typeof(Student).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
foreach (System.Reflection.PropertyInfo pro in pros)
{
string value = pro.GetValue(stu1, null).ToString();
results.Add(value); if (pro.Name == "ID")
result += "ID:" + value + " ";
else if (pro.Name == "Code")
result += "Code:" + value + " ";
else if (pro.Name == "Name")
result += "Name:" + value;
} return result;
}