2

我想在另一个Dictionary中使用。类似于 python 的东西。我试过这个,但它给了我错误。TKeyDictionary

Dictionary<Dictionary<string, string>, int> dict = new Dictionary<Dictionary<string,    string>, int>();
Dictionary<string, string> dict2 = new Dictionary<string, string>();
dict2["abc"] = "def";
dict[dict["abc"] = 20;
4

3 回答 3

10

它给你什么错误?它是在抱怨您在第 4 行缺少括号吗?

第 4 行看起来应该是:

dict[dict["abc"]] = 20;

但是,您可能是这个意思,因为“abc”不是 dict 的键:

dict[dict2["abc"]] = 20;

但是dict2["abc"]是 a string,当 dict 的键应该是 a 时Dictionary<string, string>

但是,让我们在这一点上重新审视你最初的目标,然后再走这条路。首先,您不应该将可变类型用作字典键。

这可能是您正在寻找的代码:

Dictionary<string, int> dict  = new Dictionary<string, int>();
Dictionary<string, string> dict2 = new Dictionary<string, string>();
dict2["abc"] = "def";
dict[dict2["abc"]] = 20;

但很难确定。

于 2009-01-11T18:36:52.530 回答
6

只是把它放在那里,我经常发现处理像你描述的复杂字典,使用真实姓名要好得多,而不是试图让代码的读者整理出来。

您可以根据个人喜好选择两种方式之一。使用 using 语句创建编译器别名。请注意,您必须使用完全限定的类型名称,因为这是编译器别名。

using ComplexKey = System.Collections.Generic.Dictionary<String, String>;
using ComplexType = System.Collections.Generic.Dictionary<
   System.Collections.Generic.Dictionary<String, String>,
   String
   >;

或者您可以采用完整的类型方式并实际创建一个继承自 Dictionary 的类。

class ComplexKey : Dictionary<String, String> { ... }
class ComplexType : Dictionary<ComplexKey, String> { ... }

这样做会让你和你的代码的读者更容易弄清楚你在做什么。我的一般经验法则是,如果我正在创建一个泛型的泛型,那么是时候考虑构建一些一等公民来代表我的逻辑了。

于 2009-01-11T18:41:37.437 回答
4

这是因为 "dict["abc"] 不是字典,而是 "string"。

正确的,你问的是:

Dictionary<Dictionary<string, string>, int> dict = new Dictionary<Dictionary<string,    string>, int>();
Dictionary<string, string> dict2 = new Dictionary<string, string>();
dict2["abc"] = "def";
dict[dict2] = 20;

但我不确定,这是你真正想要/需要的。

于 2009-01-11T18:34:00.633 回答