C#暴露强类型字典键

时间:2012-06-20 16:34:35

标签: c# dictionary

我确信我不会用正确的词语来解释,但我希望你明白我想要完成的事情。    我有一个在字典集合中传递的类。是否必须在字典集合中传递此类需要的某些键。我希望能够公开公开类所需的那些键,但不仅仅是字符串,而是实际的项目。枚举可以工作,但由于这个类是基类,我不认为这是一个很好的解决方案。我需要类似于每次向Resources.resx文件添加项时生成的Resources类。所以你可以去参考Resources.Resources.MyLabel1,Resources.Resources.MyLabel2等。    这可能吗?

谢谢, 麦克

3 个答案:

答案 0 :(得分:2)

创建公开您的值的属性

public class MyClass

    private Dictionary<string,string> _dict;

    public MyClass (Dictionary<string,string> dict)
    {
        _dict = dict;
    }

    public string FirstName { get { return _dict["FirstName"]; } }
    public string LastName { get { return _dict["LastName"]; } }
    ...
}

或者您也可以创建读/写属性

public string FirstName { 
    get { return _dict["FirstName"]; }
    set { _dict["FirstName"] = value; }
}

答案 1 :(得分:1)

你可以在你的班级上提供一个静态或const成员:

class PickyClass {
  public static readonly string[] RequiredKeys = new[] {"length", "width"};

  /// <summary>
  /// Please note that you must include at least RequiredKeys in values
  /// </summary>
  public void Setup(Dictionary<string,string> values)
  {
    ...
  }
}

(编辑)或者它们是否可以按名称寻址?在这种情况下,如何:

class PickyClass {
  public class RequiredKeys
  {
    public const string Length = "length";
    public const string Width = "width";
  }

  /// <summary>
  /// Please note that you must include every const in RequiredKeys in values
  /// </summary>
  public void Setup(Dictionary<string,string> values)
  {
    ...
  }
}

答案 2 :(得分:0)

这听起来像你应该隐藏的细节

public void Setup(Dictionary<string,string> values)

如果values必须包含某些键,那么您可以在自己的词典类型中对该信息进行编码。

public class FussyDictionary : Dictionary<string,string> {
  // You must provide these values
  public FussyDictionary(string valueA, string valueB) {
     Add("magicKey1", valueA);
     Add("magicKey2", valueB);
  }

  // Override remove to stop you removing these keys?
}