c#调试-在不知道哪个属性有某个值的情况下查找它

本文关键字:情况下 查找 属性 调试 不知道 | 更新日期: 2023-09-27 18:13:54

我的问题是:如果我知道对象的属性有值"example",我怎么能找到它是哪个属性,而不检查对象的每一个可能的属性,当我调试?

我想我有点不清楚。例如,我有一个ImagePart对象。当我调试时,我希望看到TargetName的值。要做到这一点,我应该将鼠标移到对象上,然后移到非公共成员上。但是,如果我想要看到更深的值,我就找不到它了

c#调试-在不知道哪个属性有某个值的情况下查找它

如果我理解正确的话,你有一个有很多属性的对象,那么你可以在那个类中创建一个方法,使用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)

请注意,您可能想使用object以外的其他东西作为参数,以使其更容易在手表中键入,但VS手表窗口,您不仅可以轻松键入数字和字符串,还可以轻松键入枚举。Visual Studio的监视功能非常强大,它们几乎总能正确地计算表达式。

我添加了while循环来递归地遍历所有父元素。BindingFlags.NonPublic将返回类的所有私有方法和受保护方法,但不返回基类的私有方法。在所有基类中导航,直到点击Object将解决这个问题。

在VS 2010中,你可以pin-UP这个属性。因此,下一次,当您遇到调试点时,相应的值将自动突出显示。更多信息:http://weblogs.asp.net/pawanmishra/archive/2009/12/26/another-vs-2010-feature-pin-up.aspx

这里也有类似的问题。请在那里看到我的答案:搜索功能,我正在谈论的作品属性值,就像它为属性名称。