【发布时间】:2014-08-28 02:12:42
【问题描述】:
我的行为很奇怪。这是代码:
...
private Object lockobj = new Object();
private Dictionary<String, BasicTagBean> toVerifyTags = null;
public void verifyTags(List<BasicTagBean> tags)
{
System.Diagnostics.Debug.WriteLine("Thread ID: " + Thread.CurrentThread.ManagedThreadId);
lock (lockobj)
{
foreach (BasicTagBean tag in tags)
{
if (!alreadyVerified.ContainsKey(tag.EPC))
{
toVerifyTags.Add(tag.EPC, tag);
}
}
}
...
有时我会遇到这个异常
'System.ArgumentException' occurred in mscorlib.dll
在这行代码:
toVerifyTags.Add(tag.EPC, tag);
异常是指错误地将已经存在的元素添加到集合中,但我检查了这一点。也许是线程问题,但应用程序输出始终显示相同的线程 ID。我正在使用 c# pocketpc 3.5 版。
【问题讨论】:
-
什么是
toVerifyTags,它是在哪里创建的?alreadyVerified是在哪里创建的? -
您能在代码示例中添加
toVerifyTags的声明吗?此外,该异常似乎非常准确,您的字典中已经有了该键。 -
您没有检查密钥是否已存在于
toVerifyTags... -
您似乎有两个不同的字典:已经验证和 toVerifyTags。仅仅因为 alreadyVerfied 不包含某个键,并不意味着 toVerfyTags 也不包含它。
-
小错误,抱歉。我更新了问题。