今天我的代码中的问题有点奇怪,我还不能复制它。我正在处理一个类型化的数据集(由设计器创建),并且我正在循环处理数据表中的所有行。
有时(!),通过主键查找时,返回的行不等于枚举器中的行。这是我写的一些代码来重现这个问题:
foreach(DataSet1.DataTable1Row dr in ds.DataTable1)
{
if(ds.DataTable1.FindById(dr.Id) != dr)
Console.Write(dr.Id);
}
不会向控制台写入任何行,因为findbyid总是返回同一行,这是非常合乎逻辑的。在我的项目代码中,有一个类似的数据集,有几个字符串列,在大约3%的行中(总是相同的行!)没有,其中一个字符串字段为空:
ds.DataTable1.FindById(dr.Id) != dr // returns false, for whatever reason
主键是唯一的主键字段,因此findbyid是一个生成的方法。有人知道一点提示吗?或者以前也遇到过同样的问题吗?恐怕这是我做的一个非常特殊的案例,它启用了这个bug或特性。:)
我考虑过这个可能是由枚举所做的演员表产生的。枚举器使用
DataRow
生成的类型化行的基类型。但我没有发现什么问题…
干杯
马蒂亚斯