WindowsBase.dll 中发生“System.InvalidCastException”类型的第一次机会异常

A first chance exception of type 'System.InvalidCastException' occurred in WindowsBase.dll

提问人:Johan Larsson 提问时间:5/11/2014 最后编辑:Johan Larsson 更新时间:5/11/2014 访问量:838

问:

在将 ListBox 的 ItemsSource 绑定到 .ObservableCollection<object>

该集合填充了 {DependencyPropertyChangedEventArgs, EventEntry} 的组合

我偷看了一眼,发现:DependencyPropertyChangedEventArgs

public struct DependencyPropertyChangedEventArgs
{
    ...
    public override bool Equals(object obj)
    {
        return this.Equals((DependencyPropertyChangedEventArgs)obj); <- huge cast right here?
    }
}

EventEntry 代码:

public class EventEntry
{
    public EventEntry(string name)
    {
        Name = name;
    }
    public string Name { get; private set; }
}

当我阅读窥视代码时,它被设计为爆炸。

这是对的吗?

C# WPF 强制转换 列表框 相等性

评论

1赞 Clemens 5/11/2014
派生自 DependencyPropertyChangedEventArgs 并重写 Equals?或者根本不使用它,而是使用自己的类?
0赞 Johan Larsson 5/11/2014
@Clemens是的,是时候解决解决了!

答:

0赞 Johan Larsson 5/11/2014 #1

已确认的错误,重现:

[Test]
public void Repro()
{
    var args = new DependencyPropertyChangedEventArgs(UIElement.IsEnabledProperty, false, true);
    Assert.Throws<InvalidCastException>(() => args.Equals(1));
}

已确认实现中的错误:(以下代码来自参考源)

public override bool Equals(object obj)
{
    return Equals((DependencyPropertyChangedEventArgs)obj);
}

在 Connect 上提交了一个错误

评论

0赞 Johan Larsson 5/11/2014
这并不意味着答案,更多信息。如果我知道怎么做,应该让它成为 wiki。