是否可以在深层嵌套字典上使用TryGetValue?

时间:2013-03-21 13:11:06

标签: c# json dictionary json.net trygetvalue

我想使用TryGetValue方法访问字典safelay上的某个属性。

例如,我将直接访问的条目如下:

jsonObject[prop1][prop2][0][prop3]

有没有方便的方法呢?

1 个答案:

答案 0 :(得分:1)

这是一个想法(未经测试)。它确实假定嵌套IDictionary至少与指定的键数一样深,并且在object中工作(你当然可以做一些事情来使它成为通用的):

bool TryGetNestedValue (this IDictionary dict, out object value, 
    params object[] keys)
{
    for(int i = 0; i < keys.Length; i++)
    {
        var key = keys[i];

        if (!dict.Contains(key))
        {
            value = null;
            return false;
        }

        if (i == keys.Length - 1)
        {
            value = dict[key];
            return true;
        }

        dict = dict[key];
    }

    throw new ArgumentException("keys");
}