使用字典进行实例化

时间:2012-04-02 01:07:05

标签: c# wpf client-server instance instantiation

我目前正在开发一个项目,该项目创建一个字典,其中包含实例的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(字典)传递数据的方式 并且它们工作正常但是当我在字典中添加复杂类型的列表时,我得到了上述错误。

如果有人有任何建议我会非常感激。我希望它与我初始加载的空白列表有关。如果您还需要了解其他信息,请致谢!

3 个答案:

答案 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");