【问题标题】:How do I access values from a Dictionary in an object?如何访问对象中字典中的值?
【发布时间】:2012-06-03 04:28:12
【问题描述】:

好的,我不确定我问的问题是否正确,但这里是。我正在使用 Javascript .NET 来解析 Javascript 对象数组。我的代码如下所示:

object packlist;
using (var context = new JavascriptContext())
{
    context.Run(@"function packlist() { this.packs = new Array(); }
                var packlist = new packlist();
                packlist.packs[0] = { item1:""something"", item2:""something2"", item3:""something3"" };
                packlist.packs[1] = { item1:""something"", item2:""something2"", item3:""something3"" };
                packlist.packs[2] = { item1:""something"", item2:""something2"", item3:""something3"" };");
    packlist = context.GetParameter("packlist");
}

调试时,Locals 窗口显示对象看起来像 this 我的问题是如何从packlist.packs[0] 访问item1

【问题讨论】:

    标签: c# javascript object dictionary


    【解决方案1】:

    大体结构如下:

    PackList => Dictionary of <string, Dictionary<string,object>[]>
    

    意思是它是一个字典,其中每个值都是一个字典。

    应该是

    object[] arr = packlist["packs"] as object[]; 
    Dictionary<string, object> dictPack = arr[0] as Dictionary<string, object>;
    object item1 = dictPack["item1"];
    

    或者

    object packs;
    if (packlist.TryGetValue("packs",out packs)) { 
         object[] arr = packs as object[]; 
         Dictionary<string, object> dictPack = arr[0] as Dictionary<string, object>;
         object item1 = dictPack["item1"];
    }
    

    它们之间的区别在于,首先,假设键存在于字典中,否则会引发异常。第二,它会尝试获取值并告诉你密钥是否有效。

    要检查一个键是否在字典中,你可以使用这个:

    bool exists = packlist.ContainsKey("item1");
    

    遍历字典中的所有项目

    foreach KeyPairValue<string,object> kp in packlist
    {
        string key =  kp.Key;
        object value = kp.Value;
    }
    

    这是字典类的 MSDN 链接

    http://msdn.microsoft.com/fr-fr/library/bb347013.aspx

    【讨论】:

    • 我无法在packlist 上使用扩展方法TryGetValueContainsKey。我该怎么做才能得到它们?
    • 您必须使用以下方法解析它:"Dictionary packlist =(Dictionary) context.GetParameter("packlist");"您可能还必须解析其他值。我更新了我的代码。
    【解决方案2】:

    我认为是:

    var a = packlist.packs[0]["item1"];

    【讨论】:

    • packlist 是一个字典,其中每个值都是一个字典数组。此代码不起作用。
    【解决方案3】:

    您的 packlist 变量是一个具有单个键的字典,其值是一个对象数组,并且该数组中的每个条目也是一个字典。所以获得价值会是这样的。

    Dictionary<string,object> dicPacklist =(Dictionary<string,object>) packlist;
    object[] packs = (object[])dicPacklist["packs"];
    Dictionary<string,object> dicPackOne = (Dictionary<string,object>)packs[0];
    object item1Value = dicPackOne["item1"]; //"something"
    

    【讨论】:

    • 谢谢!这对理解它是如何工作的有很大帮助。我希望我能够投票给你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 2022-11-22
    相关资源
    最近更新 更多