首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态列出对象的内容

动态列出对象的内容
EN

Stack Overflow用户
提问于 2011-06-01 23:47:53
回答 7查看 853关注 0票数 1

有两种对象:

代码语言:javascript
复制
public class Toto
{
    String test1 = "";
    int test2 = 0;
}

public class Titi
{
    String testA = "";
    int testB = 0;
}

我会创建一个方法,允许我动态检查任何对象的内容。例如:

代码语言:javascript
复制
public void checkDatas(Object o)

在这个方法中,我将访问test1并检查它的值,然后是test2、testA和testB。像这样的东西(Object) Object.getMember(new Toto(),"test1")

我找到了一些关于反射过程的解释,但都不起作用。

有人有主意了吗?

提前谢谢。

EN

回答 7

Stack Overflow用户

发布于 2011-06-01 23:58:49

您可以使用反射来读取(未知)对象的成员,例如:

代码语言:javascript
复制
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));
}

这将生成以下输出:

代码语言:javascript
复制
test1 : aaa
test2 : 0

注意:如果您的类有私有字段,那么在调用Type.GetFields()时必须指定正确的BindingFlags,如上所示。

票数 3
EN

Stack Overflow用户

发布于 2011-06-01 23:54:59

你可以做这样的事情,但如果不知道“检查每个成员”是什么,我就不能帮你更多:

代码语言:javascript
复制
public void CheckMembers(object o)
{
    foreach(var member in o.GetType().GetFields())
    {
        object value = member.GetValue(o);
    }
}
票数 2
EN

Stack Overflow用户

发布于 2011-06-01 23:52:58

我真的不知道你为什么想要这样的东西,如果你有的话,请提供这些信息。但是你不能这样做吗:

代码语言:javascript
复制
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,您仍然应该向我们提供有关您正在做什么的信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6203959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档