我目前正在开发一个项目,该项目创建一个字典,其中包含实例的int索引和复杂类型作为值。由于这是一个巨大的学校项目,我不想发布大量的代码,因为我有一个逻辑问题,而不是“我需要代码”。我会尽可能地清楚,如果有什么需要更好地解释,请告诉我。
首先关闭。我的服务器上有一本字典:
private Dictionary<int,List<complexType>> dictName = new Dictionary<int,List<complexType>>
每次客户端启动它都会在字典中注册(我创建一个空白的复杂类型来实例化它然后加载字典):
List<complexType> temp = null;
dictName.Add(id,temp)
然后,当我想要添加到特定实例的列表时,我会这样做:
complexType myItem = new complexType();
dictName[id].Add(myItem);
当我运行此代码时,第二个客户端尝试运行时出现错误:
“未处理的类型异常 发生'System.Reflection.TargetInvocationException' mscorlib.dll中。附加信息:异常已被抛出 调用的目标。
现在,当第二个用户点击时会发生这种情况:
dictName.Add(id,temp)
来自第一部分。
如果我将temp的实例化更改为List<complexType> temp = new List<complexType>();
然后它通过那个地点,但是当它更新客户端时我再次得到同样的错误。
我目前正在使用这种用int和string(字典)传递数据的方式 并且它们工作正常但是当我在字典中添加复杂类型的列表时,我得到了上述错误。
如果有人有任何建议我会非常感激。我希望它与我初始加载的空白列表有关。如果您还需要了解其他信息,请致谢!
答案 0 :(得分:1)
您正在制作列表字典。所以你试图添加到一个null的列表,这就是第一个例外。
其次,我从未见过“新私人词典”这是一个剪切和粘贴错字?
这有效:
Dictionary<int, List<string>> dictName = new Dictionary<int, List<string>>();
dictName.Add(0, new List<string>());
dictName[0].Add("First");
dictName.Add(1, new List<string>());
dictName[1].Add("Second");
你有一个复杂类型的列表,我有字符串列表这一事实无关紧要。
答案 1 :(得分:0)
看起来你应该将字典条目初始化为:
dictName.Add(id, new List<complexType>());
您还可以尝试使用通用的Lookup类型,这基本上就是您所需要的 - 键值列表。
var lookupName = new Lookup<int, complexType>();
lookup.Add(id, new complexType()); // Creates key 'id' and adds new ct.
lookup.Add(id, new complexType()); // Adds new ct to existing key 'id'
lookup.Add(651, null); // Creates key 651 and adds null
因此,你可以使用add方法将复杂类型实例添加到id密钥,甚至不用考虑密钥是否存在。
lookup[id]
将返回与给定id链接的复杂类型的IEnumerable。
示例:
var lu = new Lookup<int, string>();
lu.Add(7, "Seven");
lu.Add(7, "SEVEN");
lu.Add(4, "Four");
lu.Add(7, "7");
lu.Add(4, "FOUR");
lu.Add(4, "FOUR");
Console.WriteLine(string.Join(", ", lu[7])); // "Seven, SEVEN, 7"
Console.WriteLine(string.Join(", ", lu[4])); // "Four, FOUR, FOUR"
foreach (var grp in lu)
{
int id = grp.Key;
foreach (var str in grp)
{
...
}
}
答案 2 :(得分:0)
尝试这种方式:
Dictionary<int, List<string>> dictName = new Dictionary<int, List<string>>();
dictName.Add(0, null);
dictName[0] = new List<string>();
dictName[0].Add("Hello");