簡體   English   中英

C#調試-在不知道具有哪個屬性的情況下尋找某個值

[英]C# debug - looking for a certain value without knowing which property has it

我的問題是:如果我知道對象的屬性具有值“ 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 watch Window不僅可以輕松鍵入數字和字符串,還可以輕松枚舉枚舉。 Visual Studio手表功能非常強大,它們幾乎總是會正確評估表達式。

我添加了while循環以遞歸遍歷所有父母。 BindingFlags.NonPublic將返回該類的所有私有方法和受保護的方法,但不返回基類的私有方法。 瀏覽所有基類,直到單擊Object將解決此問題。

使用VS 2010,您可以固定該屬性。 因此,下次當您到達調試點時,相應的值將自動突出顯示。 有關更多信息: http : //weblogs.asp.net/pawanmishra/archive/2009/12/26/another-vs-2010-feature-pin-up.aspx

這里也有類似的問題。 請在那里查看我的答案 :我正在談論的“搜索”功能對屬性值有效,就像對屬性名稱一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM