字典比可以返回DependencyProperty.UnsetValue

时间:2013-02-19 21:34:03

标签: c# .net wpf xaml

我的代码中有很多字典绑定。其中大多数都找不到并使用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);
        }
    }        
}

1 个答案:

答案 0 :(得分:1)

UnsetValue的运行时类型为Object,因此对于任何其他TValue类型,errorResult将为null,default(TValue)也为null。因此,最后,您通常在缺少密钥时返回null,而不是抛出相应的异常。这与IDictionary合同相反,这就是为什么事情不能解决的问题。从本质上讲,你的类看起来像一个真正的IDictionary(即它实现了IDictionary),但它实际上并不是一个(即它不像一个行为)。你不能说出你在运行时得到的异常,但我认为它是来自客户端代码的NullReferenceException,它不期望你的方法调用返回null。

您实际上是在现有代码中尝试将dict[key]重写为dict.TryGetValue(key)。我可以同情这些动机,但这不会奏效。它必须从呼叫方修复,听起来你无法控制它。