在C#类之间传递值时丢失对象值

时间:2014-03-08 00:47:13

标签: c# .net

我在静态类“ObjectMapper”中有这个方法:

enter image description here

正如我们所看到的,该方法有一个带有一些项目([0])的对象“dataReader”。但是......当我调用这个方法时:

enter image description here

传递的参数正在丢失此记录。即使将“DataReaderToObjectList”方法从“public static”更改为“public”,该值也会丢失此数据。当我的对象有两个或多个记录时,它会被传递,但“杀死”第一个记录。如果我以“经典”方式进行,我可以正确操作dataReader。但是,一旦在应用程序中的几个地方使用它,我就需要这种方法。

3 个答案:

答案 0 :(得分:1)

在SelectAll()中调用.Read()
繁荣的第一个记录消失了 你没有那条记录

在DataReaderToObject中 你打电话给.Read()
砰的一声,你是第二个记录

答案 1 :(得分:0)

请注意,您只能枚举SqlDataReader对象的内容一次。这包括在Results View预览窗口中枚举它们。在这个特定的实例中数据正在丢失,因为你在调试器中枚举它们,这会耗尽阅读器,然后使用耗尽的阅读器进入函数

我认为代码中还存在一个更基本的错误。您在同一实例上调用Read方法两次,而不实际枚举第一次读取产生的任何数据。您可以通过移除Read方法

中的SelectAll调用来解决此问题

答案 2 :(得分:0)

我找到了解决此问题的替代解决方案(至少现在已解决):

在第1项中,我声明了一个泛型对象,它从dataReader获取属性和值,并作为参数传递(执行显式转换,如我们所见)到一个新的方法,将此对象作为SqlDataReader,如图所示在下图的第2项中。

enter image description here

这个新方法放在同一个静态类ObjectMapper中,但奇怪的是我能够将我的对象作为参数传递而不会丢失任何数据。 @Blam,你的理论是有道理的,但在这种情况下并没有起作用。