我正在使用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中,但不确定它是如何全部来的。如果有人可以提供和赞赏的例子。
提前致谢。
答案 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>();