我正在尝试使用编程语言CLI / C ++将数据存储在二维字典中。
然而,我在向他们添加内容时遇到了问题。
这是我在C#中的尝试:
Dictionary<int, Dictionary<int, string>> MyDictionary;
if (!MyDictionary.ContainsKey(100))
MyDictionary.Add(100, new Dictionary<int, string>());
MyDictionary[100][1234] = "Hello World";
现在 - 我的CLI / C ++尝试:
Dictionary<int, Dictionary<int, String^>^>^ MyDictionary = gcnew Dictionary<int, Dictionary<int, String^>^>();
//ContainsKey check here
MyDictionary[100][1234] = "Hello World"; //<--- ERROR
MyDictionary[100, 1234] = "Hello World"; //<--- ERROR
您似乎没有使用[] []在词典中添加内容。我看到人们使用[100,1234]而不是[100] [1234],但这也不起作用。
错误:
function "System::Collections::Generic::Dictionary<TKey, TValue>::default[TKey]::set [with TKey=int, TValue=System::Collections::Generic::Dictionary<int, String ^> ^]" cannot be called with the given argument list
argument types are: (int, int, String^)
object type is: System::Collections::Generic::Dictionary<int, System::Collections::Generic::Dictionary<int, String ^> ^> ^
我做错了什么?
答案 0 :(得分:2)
你没有做错任何事。请注意,代码编译得很好。这是IntelliSense解析器中的错误。它有几个,EDG前端最初设计用于解析C ++,并且在需要处理C ++ / CLI代码时并不完全没有错误。
你可能不想忽略这些错误的诊断,它们非常烦人。最不痛苦的解决方法是:
auto item = MyDictionary[100];
item[1234] = "Hello World";
优化器完成后,速度没有差别。