只有在断点处断开时才会引发异常

时间:2017-03-12 05:47:40

标签: c# .net visual-studio

有一个类似的问题。我遇到的问题是这违反了调试系统。调试器创建了这个问题。

所以我有以下课程:

public class Cache<TKey, TData> : Dictionary<TKey, TData>
{
    public TData Get(TKey key, Func<TData> generate)
    {
        if (TryGetValue(key, out TData data))
        {
            return data;
        }
        try
        {
            Add(key, data = generate());
        }
        catch (Exception e)
        {
            Debugger.Break();
        }
        return data;
    }
}

现在,如果我在任何generate函数中放入断点,我会收到异常。 ArgumentException已添加具有相同密钥的项目。

2 个答案:

答案 0 :(得分:0)

我意识到因为我在属性中使用了这个Get方法。当应用程序中断时,调试器会获取我的类的所有属性,因此在检查密钥之后但在添加密钥之前,我的所有缓存都会被填充。这很难调试,但至少我弄清楚了。我想知道是否有办法避免这种情况。

答案 1 :(得分:0)

替换

Add(key, data = generate());

this[key] = data = generate();

当您通过this[index]分配时,它会添加或更新,具体取决于密钥是否已存在。