【问题标题】:System.ArgumentException occurredSystem.ArgumentException 发生
【发布时间】: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 也不包含它。
  • 小错误,抱歉。我更新了问题。

标签: c# pocketpc


【解决方案1】:

异常似乎告诉您,您尝试在toVerifyTags 中添加的密钥已经存在。您没有检查该键是否已存在于正确的字典中。

public void verifyTags(List<BasicTagBean> tags)
{
    System.Diagnostics.Debug.WriteLine("Thread ID: " + Thread.CurrentThread.ManagedThreadId);
    lock (lockobj)
    {
        foreach (BasicTagBean tag in tags)
        {
            if (!toVerifyTags.ContainsKey(tag.EPC))
            {
                toVerifyTags.Add(tag.EPC, tag);
            }
        }
    }

【讨论】:

  • 我的错。只有字典,对不起。我更新了问题。
猜你喜欢
  • 2016-08-06
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-29
相关资源
最近更新 更多