C# - 如何编写一个具有一个键和两个值的集合(字典?



创建键、值 1、值 2 集合的最简单方法是什么?

对我来说重要的是,在给定该对的情况下,检索值 1 或值 2 既容易又简短(请显示示例)

我知道我能做到——

class MyObject
{
    internal string NameA { get; set; }
    internal string NameB { get; set; }
}

class Other
{
    Dictionary<string, MyObject> MyObjectCollection { get; set; }
   private void function()
    {
        MyObjectCollection = new Dictionary<string, MyObject>()
            { { "key", new MyObject { NameA = "something", NameB = "something else" } } };                
        var valueA = MyObjectCollection["key"].NameA; // = "something"
    }
}

有没有更好的方法?

最容易实现的解决方案(Dictionary<String, Tuple<String, String>>)不是最容易支持开发的解决方案(MyObjectCollection[key].Value2是什么?)。所以我建议使用你自己的类

  class MyPair {
    public string NameA { get; internal set; }
    public string NameB { get; internal set; }
    public MyPair(nameA, nameB) {
      NameA = nameA;
      NameB = nameB;  
    }
    public override String ToString() {
      return $"NameA = {NameA}; NameB = {NameB}";
    }
  }
  class Other {
    // you don't want "set" here
    // = new ... <- C# 6.0 feature
    public Dictionary<string, MyPair> Data { get; } = new Dictionary<string, MyPair>() {
      {"key", new MyPair("something", "something else")},
    };
   ...
 Other myOther = new Other();
 String test = myOther.Data["key"].NameA;

您可以使用元组:

Dictionary<string,Tuple<string,string>> MyObjectCollection {get; set;}
private void function()
{
    MyObjectCollection = new Dictionary<string, Tuple<string,string>>();
    MyObjectCollection.Add("key1", Tuple.Create("test1", "test2"));               
}
List<MyObject> list = new List<MyObject>();
var res = list.ToDictionary(x => x, x => string.Format("Val: {0}", x));

第一个 lambda 允许您选择键,第二个 lambda 选择值。

最新更新