【问题标题】:C# nested dictionariesC# 嵌套字典
【发布时间】:2013-03-08 05:28:58
【问题描述】:

我的语法有什么问题?我希望能够通过 info["Gen"]["name"] 获得值“Genesis”

    public var info = new Dictionary<string, Dictionary<string, string>> {
    {"Gen", new Dictionary<string, string> {
    {"name", "Genesis"},
    {"chapters", "50"},
    {"before", ""},
    {"after", "Exod"}
    }},
    {"Exod", new Dictionary<string, string> {
    {"name", "Exodus"},
    {"chapters", "40"},
    {"before", "Gen"},
    {"after", "Lev"}
    }}};

【问题讨论】:

  • 你得到什么编译器错误?
  • var ..这个词是否出现编译错误?
  • 除了错误的实际原因之外,你为什么还要使用Dictionary&lt;string, string&gt; 作为值,当它看起来你真的想要一个简单的Chapter 类时?
  • 是的,我认为问题在于“var”,因为它直接在类中,而不是在方法中使用。我应该改用什么?
  • 我同意 Jon Skeet 的观点,我认为创建一个类是正确的路线,如果他想要一个 Collection,那么他可以创建一个类本身的 List

标签: c# dictionary nested


【解决方案1】:

您不能使用var 定义类字段。

var 更改为Dictionary&lt;string, Dictionary&lt;string, string&gt;&gt;

public Dictionary<string, Dictionary<string, string>> info =
    new Dictionary<string, Dictionary<string, string>>
    {
        {
            "Gen",
            new Dictionary<string, string>
            {
                {"name", "Genesis"},
                {"chapters", "50"},
                {"before", ""},
                {"after", "Exod"}
            }
        },
        {
            "Exod",
            new Dictionary<string, string>
            {
                {"name", "Exodus"},
                {"chapters", "40"},
                {"before", "Gen"},
                {"after", "Lev"}
            }
        }
    };

有关var 关键字及其用法的更多信息,请参阅here

【讨论】:

    【解决方案2】:

    来自MSDN;

    • var 只能在声明和初始化局部变量时使用 在同一份声明中;变量不能初始化为 null,或者 到方法组或匿名函数。

    • var 不能用于类范围内的字段。

    • 使用var声明的变量不能用于初始化 表达。

    只需将您的 var 更改为 Dictionary&lt;string, Dictionary&lt;string, string&gt;&gt;。喜欢;

    public Dictionary<string, Dictionary<string, string>> info =
        new Dictionary<string, Dictionary<string, string>>{}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-29
      • 1970-01-01
      • 2018-01-29
      • 2021-12-20
      • 2012-01-29
      • 2018-05-31
      • 2014-06-02
      • 1970-01-01
      相关资源
      最近更新 更多