我的代码中有很多字典绑定。其中大多数都找不到并使用FallBackValue。
这一切都非常适合用户。
但是,当我在调试器中运行它时,在输出窗口中显示所有这些错误需要很长时间。
我问了这个问题WPF Dictionary Binding failure is very slow,并被告知我应该返回DependencyProperty.UnsetValue。
我试过了,它编译了。但是当我运行它时,我得到一个例外。
有没有办法定义一个也可以返回DependencyProperty.UnsetValue的字典?(或者其他一些方法可以更快地失败。)
更新:这是我尝试的迭代:
public class NullTolerantDictionary<TKey, TValue>
: Dictionary<TKey, TValue> where TValue : class
{
public new TValue this[TKey key]
{
get
{
TValue value;
bool success = TryGetValue(key, out value);
if (success)
return value;
var errorResult = DependencyProperty.UnsetValue as TValue;
if (errorResult != null)
return errorResult;
return default(TValue);
}
}
}
答案 0 :(得分:1)
UnsetValue的运行时类型为Object,因此对于任何其他TValue类型,errorResult将为null,default(TValue)
也为null。因此,最后,您通常在缺少密钥时返回null,而不是抛出相应的异常。这与IDictionary合同相反,这就是为什么事情不能解决的问题。从本质上讲,你的类看起来像一个真正的IDictionary(即它实现了IDictionary),但它实际上并不是一个(即它不像一个行为)。你不能说出你在运行时得到的异常,但我认为它是来自客户端代码的NullReferenceException,它不期望你的方法调用返回null。
您实际上是在现有代码中尝试将dict[key]
重写为dict.TryGetValue(key)
。我可以同情这些动机,但这不会奏效。它必须从呼叫方修复,听起来你无法控制它。