C# DataTable不合并用户定义的对象

C# DataTable不合并用户定义的对象,c#,merge,datatable,C#,Merge,Datatable,我在数据表处理我自己定义的对象(位置)时遇到问题。 该对象存储一些数据并覆盖ToString、Equals和GetHashCode。此外,它还为==和!=提供了静态运算符 只要存储此对象的列不是键列,DataTable就可以正常工作。将其设置为PrimaryKey并将另一个表合并到其中失败,因为内容不相等。(为datagridview和DataTable本身定价时,会在合并后发现数据违反了键。) 附件:合并后,您会发现一些手动数据比较 有人知道怎么处理吗 向你问好,蒂洛 this.data.Ro

我在数据表处理我自己定义的对象(位置)时遇到问题。 该对象存储一些数据并覆盖ToString、Equals和GetHashCode。此外,它还为==和!=提供了静态运算符

只要存储此对象的列不是键列,DataTable就可以正常工作。将其设置为PrimaryKey并将另一个表合并到其中失败,因为内容不相等。(为datagridview和DataTable本身定价时,会在合并后发现数据违反了键。)

附件:合并后,您会发现一些手动数据比较

有人知道怎么处理吗

向你问好,蒂洛

this.data.Rows[1][5]==this.data.Rows[0][5]
false

(Position)this.data.Rows[1][5]==(Position)this.data.Rows[0][5]
true

this.data.Rows[1][5].Equals(this.data.Rows[0][5])
true

this.data.Rows[1][5].GetHashCode()
-461267399
this.data.Rows[0][5].GetHashCode()
-461267399

this.data.Columns[5]
{PositionX}
base {System.ComponentModel.MarshalByValueComponent}: {PositionX}
AllowDBNull: false
AutoIncrement: false
AutoIncrementSeed: 0
AutoIncrementStep: 1
Caption: "PositionX"
ColumnMapping: Element
ColumnName: "PositionX"
DataType: {Name = "Position" FullName = "TiloW.Parameter.Position"}
DateTimeMode: UnspecifiedLocal
DefaultValue: {}
Expression: ""
ExtendedProperties: Count = 1
MaxLength: -1
Namespace: ""
Ordinal: 5
Prefix: ""
ReadOnly: false
Table: {}
Unique: false 

仅供参考。我找到了一个解决方案,添加了一个新的列来存储覆盖的hashcode,它将用于合并和内部事务。它将在导出之前删除,并在导入或生成过程中创建