c#调试-在不知道哪个属性有某个值的情况下查找它
本文关键字:情况下 查找 属性 调试 不知道 | 更新日期: 2023-09-27 18:13:54
我的问题是:如果我知道对象的属性有值"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)
请注意,您可能想使用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
这里也有类似的问题。请在那里看到我的答案:搜索功能,我正在谈论的作品属性值,就像它为属性名称。