我经常需要一个键对应多个值的字典,但在C#中,大多数字典都是二维的,比如Dictionary和Hashtable。
我想要像这样的东西:
var d = new Dictionary<key-dt,value1-dt,value2-dt,value3-dt,value4-dt>();
dt 在<> 里面表示数据类型。有人对此有想法吗?
我经常需要一个键对应多个值的字典,但在C#中,大多数字典都是二维的,比如Dictionary和Hashtable。
我想要像这样的东西:
var d = new Dictionary<key-dt,value1-dt,value2-dt,value3-dt,value4-dt>();
dt 在<> 里面表示数据类型。有人对此有想法吗?
字典是一个键值对,其中根据键获取值。所有键都是唯一的。
现在,如果您想要一个具有1个键类型和多个值类型的Dictionary
,则有几个选项:
第一个是使用Tuple
var dict = new Dictionary<KeyType, Tuple<string, string, bool, int>>()
另一个选项是使用(C# 4.0及以上版本):
var dict = new Dictionary<KeyType, dynamic>()
System.Dynamic.ExpandoObject
可以具有任何类型的值。
using System;
using System.Linq;
using System.Collections.Generic;
public class Test {
public static void Main(string[] args) {
dynamic d1 = new System.Dynamic.ExpandoObject();
var dict = new Dictionary<int, dynamic>();
dict[1] = d1;
dict[1].FooBar = "Aniket";
Console.WriteLine(dict[1].FooBar);
dict[1].FooBar = new {s1="Hello", s2="World", s3=10};
Console.WriteLine(dict[1].FooBar.s1);
Console.WriteLine(dict[1].FooBar.s3);
}
}
dict[1] = d1; dict[1].FooBar = "Aniket";
我理解中 dic[1].FooBar = Aniket
是字典的键,但在这种情况下 FooBar
代表什么意思呢? - vladimir.FooBar
表示它可以是任何东西。你可以使用相同的代码将 .FooBar
替换为 .vladimir
,它仍然可以工作。我已经在运行时动态地在 dict[1]
(指向 d1
)中创建了一个名为 FooBar
的属性。 - Aniket Inge<string,dynamic> {"Sweden",currentRate = 9.95},{"Sweden",currency = "SEK"}
? - Ravi Parekh使用类描述适当的关键字段和适当的值字段,并使用这些类型的字典。
var dictionary = new Dictionary<TheKeyType, TheValuesType>();
var dictionary = new Dictionary<Tuple<Key1Type, Key2Type, Etc>, Tuple<Value1Type, Value2Type, Etc>>();
不要使用元组,虽然这是一种完全有效的解决方案,但我建议创建自己的类作为键和/或值。
你会意识到元组会使代码难以阅读。
Tuple
类都可以在这两种情况下使用 :)。 - Lukasz M
var d = new Dictionary<string, List<object>>();
或者你想要存储的任何列表。 - Justin Chmura