.net DataSet:枚举器和FindById未返回相等的DataRow

rjzwgtxy  于 2023-03-20  发布在  .NET
关注(0)|答案(1)|浏览(138)

今天我的代码中的问题有点奇怪,我还不能重现它。我正在使用一个类型化的数据集(用设计器创建的),并且我正在遍历数据表中的所有行。
有时候(!),当通过主键查找时,返回的行不等于枚举器中的行。下面是我为重现这个问题而写的一些代码:

foreach(DataSet1.DataTable1Row dr in ds.DataTable1)
{
    if(ds.DataTable1.FindById(dr.Id) != dr)
        Console.Write(dr.Id);
}

不会有任何行被写入控制台,因为FindById总是返回相同的行,这是非常合乎逻辑的,在我的项目代码中,对于一个类似的数据集,它有几个String列,在大约3%的行中(总是相同的行!),它没有返回,并且其中一个String字段是空的:

ds.DataTable1.FindById(dr.Id) != dr // returns false, for whatever reason

主键是唯一的主键字段,因此FindById是一个生成的方法。有人知道一点提示吗?或者以前遇到过同样的问题吗?恐怕这是一个非常非常特殊的情况,我制造了这个bug或特性。
我考虑过这可能是由枚举所做的强制转换产生的。枚举器确实可以使用所生成的类型化行的DataRow基类型。但是我没有发现有什么问题...

46qrfjad

46qrfjad1#

主键的类型是什么?数据集在比较Guid(可能还有其他值)时有一个微妙的错误。Guid错误只与某些Guid值有关,通常工作正常。
注意:当我说有bug时,我的意思是我知道bug报告已经被接受,但是我不知道它是否也被修复了

相关问题