繁体   English   中英

C#公开强类型字典键

[英]C# Expose strongly typed dictionary keys

我确定我不会用正确的词来解释,但我希望您理解我要完成的工作。 我有一个通过字典集合传​​递的类。 传入字典集合的此类是否具有此类需要的某些键是强制性的。 我希望能够公开公开该类所需的那些键,而不仅仅是公开字符串,而是公开实际项目。 枚举是可行的,但是由于此类是基类,因此我认为这不是一个好的解决方案。 我需要类似于每次将项目添加到Resources.resx文件时生成的Resources类的东西。 因此,您可以只转到Resources.Resources.MyLabel1,Resources.Resources.MyLabel2等。这可能吗?

谢谢,迈克

创建显示您的价值观的属性

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; }
}

您可以在您的课程中提供一个静态或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)
  {
    ...
  }
}

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

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?
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM