gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:34:00 26 4
gpt4 key购买 nike

我的问题是:如果我知道对象的某个属性具有值“example”,我如何在调试时不检查对象的每个可能属性的情况下找到它是哪个属性?

我觉得我有点不清楚。例如,我有一个 ImagePart 对象。当我调试时,我想查看 TargetName 的值。为此,我应该将鼠标移到对象上,然后移到非公共(public)成员上。但是,如果我想看到的值(value)更深,我很难找到它。

最佳答案

如果我理解正确,您有一个具有很多属性的对象,那么您可以在该类中创建一个使用 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";
}

然后在 watch 中,添加如下 watch :

MyObjectInstance.PropertyThatHasCertainValue(ValueYouAreLookingFor)

请注意,您可能希望使用 object 以外的其他参数作为参数,以便更轻松地在 watch 中键入,但是 VS watch Window 您不仅可以轻松键入数字和字符串,还可以枚举。 Visual Studio watches 非常强大,它们几乎总能正确计算表达式。

我添加了 while 循环以递归地遍历所有父级。 BindingFlags.NonPublic 将返回该类的所有私有(private)和 protected 方法,但不返回基类的私有(private)方法。浏览所有基类,直到点击 Object 将解决此问题。

关于C# 调试 - 在不知道哪个属性具有它的情况下寻找某个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8034268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com