每个键具有多个值的C#字典

时间:2011-07-15 15:40:05

标签: c# .net

我正在使用C#字典。

Dictionary<int, string> d = new Dictionary<int, string>();

我正在使用字典,因为我可以使键值唯一,并由字典强制执行。

键值为int。之前我只需要一个值。现在事情已经扩展到我需要为同一个密钥存储多个值(使用不同的数据类型)。

这样的事情 - (虽然它不起作用):

Dictionary<int,string,string,bool, bool,int,bool> d = new Dictionary<int, string,string,bool, bool,int,bool>();

请注意,string,string,bool,bool,int,bool是我想为关键字段存储的附加值,它将是一个int。

我不确定如何做到这一点。如何获取键值以存储具有不同数据类型的多个值。我认为可能的方法是将附加字段存储到List中,但不确定它是如何全部来的。如果有人可以提供和赞赏的例子。

提前致谢。

4 个答案:

答案 0 :(得分:16)

使用string, string, bool, bool, int, bool字段创建自定义数据类型,并将其用作字典值。

class MyType
{
    public string SomeVal1{ get; set; }
    public string SomeVal2{ get; set; }
    public bool SomeVal3{ get; set; }
    public bool SomeVal4{ get; set; }
    public int SomeVal5{ get; set; }
    public bool SomeVal6{ get; set; }
}

然后

var someDictionary = new Dictionary<int, MyType>();

someDictionary.Add( 1, 
                    new MyType{
                        SomeVal1 = "foo",
                        SomeVal2 = "bar",
                        SomeVal3 = true,
                        SomeVal4 = false,
                        SomeVal5 = 42,
                        SomeVal6 = true
                    });

答案 1 :(得分:11)

您可以使用Tuple作为值的通用类型。

var d = new Dictionary<int,Tuple<string,string,bool, bool,int,bool>>();

或者,创建一个将不同类型保存为一个组的类型(类或结构) - 这可能是一种更好的模型化方法。

答案 2 :(得分:0)

对于所有极客都认为我可以添加的唯一想法,我认为你应该封装这个字典放到某个类中,因此该字典包装器的用户永远不会知道发生了什么引擎盖,以及在该类中实现您喜欢的恢复逻辑,或者此处列出的逻辑。

答案 3 :(得分:0)

字典是key / value对。其中一个键对应一个值。该值可以是任何对象,因此您可以简单地创建一个包含所需成员的对象。请考虑以下事项:

var d = new Dictionary<int, string, string, bool, bool, int, bool>();

此词典的使用者将不知道这些原始类型数据旨在表示什么。你应该创建一个对象:

public class Person : IPerson
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public bool IsMarried { get; set; }
    public bool HasChildren { get; set; }        
    public bool IsHappy { get; set; }

    public Person(int id)
    {
        Id = id;
    }
}

显然,这个对象完全是为了匹配类型和表示容器中的数据。通过这种理解,您可以执行以下操作:

var d = new Dictionary<int, IPerson>();
相关问题