9

フィールドを探している動的オブジェクトのプロパティをループしていますが、例外をスローせずにフィールドが存在するかどうかを安全に評価する方法がわかりません。

        foreach (dynamic item in routes_list["mychoices"])
        {
            // these fields may or may not exist
           int strProductId = item["selectedProductId"];
           string strProductId = item["selectedProductCode"];
        }
4

3 に答える 3

5

リフレクションを使用する方がtry-catchよりも優れているため、これは私が使用する関数です:

public static bool doesPropertyExist(dynamic obj, string property)
{
    return ((Type)obj.GetType()).GetProperties().Where(p => p.Name.Equals(property)).Any();
}

それから..

if (doesPropertyExist(myDynamicObject, "myProperty")){
    // ...
}
于 2016-12-02T11:29:17.330 に答える
-1

動的変数を try キャッチで囲む必要があります。それを安全にするためのより良い方法は他にありません。

try
{
    dynamic testData = ReturnDynamic();
    var name = testData.Name;
    // do more stuff
}
catch (RuntimeBinderException)
{
    //  MyProperty doesn't exist
} 
于 2013-07-03T03:50:08.840 に答える