加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#debug – 在不知道具有哪个属性的情况下查找某个值

发布时间:2020-12-16 07:27:39 所属栏目:百科 来源:网络整理
导读:我的问题是:如果我知道对象的属性具有值“example”,那么在调试时如何在不检查对象的每个可能属性的情况下找到它的属性? 我想我有点不清楚.例如,我有一个ImagePart的对象.当我调试时,我想看到TargetName的值.要做到这一点,我应该将鼠标放在对象上,然后放在
我的问题是:如果我知道对象的属性具有值“example”,那么在调试时如何在不检查对象的每个可能属性的情况下找到它的属性?

我想我有点不清楚.例如,我有一个ImagePart的对象.当我调试时,我想看到TargetName的值.要做到这一点,我应该将鼠标放在对象上,然后放在非公共成员上.但是,如果我想看到的价值更深,我很难找到它.

解决方法

如果我理解正确,你有一个具有很多属性的对象,那么你可以在该类中创建一个方法,使用C#反射“扫描”所有属性.

在要分析的对象的类中创建这样的方法:

string PropertyThatHasCertainValue(object Value)
    {
        Type myType = this.GetType();

        while(myType != typeof(object))
        {
            foreach (PropertyInfo property_info in myType.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic))
            {
                if (object.Equals(property_info.GetValue(this,null),Value))
                {
                    return property_info.Name;
                }
            }
            myType = myType.BaseType;
        }
        return "No property has this value";
    }

然后在手表中添加以下手表:

MyObjectInstance.PropertyThatHasCertainValue(ValueYouAreLookingFor)

请注意,您可能希望使用除了对象之外的其他内容作为参数,以便更容易在手表中输入,但是VS监视窗口您不仅可以轻松键入数字和字符串,还可以键入枚举. Visual Studio手表功能非常强大,几乎总能正确评估表达式.

我已经添加了while循环以递归遍历所有父项. BindingFlags.NonPublic将返回类的所有私有和受保护方法,但不返回基类的私有方法.浏览所有基类,直到命中Object将解决此问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读