无理由调用等于覆盖

时间:2015-10-05 18:09:12

标签: c# events datagridview override

我有以下代码。出于某种原因,当触发“CellMouseDown”事件时,它似乎为我的网格中的每一行调用两次“Equals”方法。

我最近做了一些改变,显然其中一个引起了这种情况,但我现在没办法退出这些变化。

问题是我得到了一个无效的强制转换异常,因为此时“obj”不是“DataSource”类型(如果没有被解雇则无关紧要,这不应该是)

当“CellMouseDown”发射(并且发生了很多次)时,是否有人会想到“Equals”被调用的原因?

谢谢,

安德鲁

    private void gridDataSources_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
    {
        // this is so I can select the current row when you right-click to change the color
        if (e.ColumnIndex >= 0 && e.RowIndex >= 0)
        {
            this.gridDataSources.Rows[e.RowIndex].Selected = true;
            this.gridDataSources.CurrentCell = this.gridDataSources.Rows[e.RowIndex].Cells[e.ColumnIndex];
        }
    }

    public override bool Equals(object obj)
    {
        DataSource original = (DataSource)obj;

        // code removed for brevity

        return true;
    }

1 个答案:

答案 0 :(得分:0)

显然,Equin BindingListView使用了一个对象" Equals"方法内部。现在我不确定为什么以前从来不是一个问题,因为我的问题是编码不好而且它就像那样(不是我提到的变化之一)。结果我压倒了#34; Equals"我的自定义类上的方法,但我实际上是在比较两种不同的对象类型。一个是我的自定义类(模型),另一个是实际实体。我将这些相互比较,以确定我是否需要写一个历史记录条目(甚至保存任何东西,因为如果它没有什么不同,那么为什么要打扰),但我比较苹果和橘子,你不应该在覆盖"等于"方法