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

本文关键字:TryGetValue 字典 嵌套 是否 | 更新日期: 2023-09-27 18:05:01

我想使用trygetvalue方法安全地访问字典上的某个属性。

例如我可以像这样直接访问的条目:

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

有什么方便的方法吗?

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

这是一个想法(未经测试)。它确实假设嵌套的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");
}