有两种对象:
public class Toto
{
String test1 = "";
int test2 = 0;
}
public class Titi
{
String testA = "";
int testB = 0;
}我会创建一个方法,允许我动态检查任何对象的内容。例如:
public void checkDatas(Object o)在这个方法中,我将访问test1并检查它的值,然后是test2、testA和testB。像这样的东西(Object) Object.getMember(new Toto(),"test1")
我找到了一些关于反射过程的解释,但都不起作用。
有人有主意了吗?
提前谢谢。
发布于 2011-06-01 23:58:49
您可以使用反射来读取(未知)对象的成员,例如:
public class Toto
{
String test1 = "aaa";
int test2 = 0;
}
// -------------
Toto t = new Toto();
var flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
foreach (FieldInfo field in t.GetType().GetFields(flags))
{
Console.WriteLine(field.Name + " : " + field.GetValue(t));
}这将生成以下输出:
test1 : aaa
test2 : 0注意:如果您的类有私有字段,那么在调用Type.GetFields()时必须指定正确的BindingFlags,如上所示。
发布于 2011-06-01 23:54:59
你可以做这样的事情,但如果不知道“检查每个成员”是什么,我就不能帮你更多:
public void CheckMembers(object o)
{
foreach(var member in o.GetType().GetFields())
{
object value = member.GetValue(o);
}
}发布于 2011-06-01 23:52:58
我真的不知道你为什么想要这样的东西,如果你有的话,请提供这些信息。但是你不能这样做吗:
var type = o.GetType();
var members = type.GetMembers(BindingFlags.NonPublic|BindingFlags.Public);
foreach(var member in members)
{
var field = type.GetField(member.Name);
Console.WriteLine(field.GetValue(o));
}更新:使用MemberInfo而不是PropertyInfo,您仍然应该向我们提供有关您正在做什么的信息。
https://stackoverflow.com/questions/6203959
复制相似问题