有一个类似的问题。我遇到的问题是这违反了调试系统。调试器创建了这个问题。
所以我有以下课程:
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
已添加具有相同密钥的项目。
答案 0 :(得分:0)
我意识到因为我在属性中使用了这个Get
方法。当应用程序中断时,调试器会获取我的类的所有属性,因此在检查密钥之后但在添加密钥之前,我的所有缓存都会被填充。这很难调试,但至少我弄清楚了。我想知道是否有办法避免这种情况。
答案 1 :(得分:0)
替换
Add(key, data = generate());
与
this[key] = data = generate();
当您通过this[index]
分配时,它会添加或更新,具体取决于密钥是否已存在。