等于重写被无缘无故调用

本文关键字:无缘无故 调用 重写 于重写 | 更新日期: 2023-09-27 18:16:02

我有以下几段代码。由于某种原因,当"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;
    }

等于重写被无缘无故调用

显然,Equin BindingListView在内部使用了一个对象的"Equals"方法。现在我不确定为什么这从来没有一个问题,因为问题是糟糕的编码在我的部分,它一直是这样的(不是我提到的变化之一)。原来我重写了"等于"方法在我的自定义类,但我实际上比较2个不同的对象类型。一个是我的定制类(模型),另一个是实际的实体。我将它们相互比较,以确定是否需要编写历史记录条目(甚至保存任何内容,因为如果没有什么不同,那么为什么要麻烦),但是我将苹果与橙子进行比较,这实际上不应该在重写"Equals"方法时做。