C# 铸造和处理-IDataReader
假设我创建了一个数据读取器 我在我的数据库类中有一个方法,它以这种方式创建它:C# 铸造和处理-IDataReader,c#,vb.net,idisposable,C#,Vb.net,Idisposable,假设我创建了一个数据读取器 我在我的数据库类中有一个方法,它以这种方式创建它: db.ExecuteReaderIDb(sSQL) 我可以立即将其分配给using语句,并在最后处理它,但我希望使用HasRows属性,这意味着我希望转换为System.Data.Common.DbDataReader 我的问题涉及对System.Data.Common.DbDataReader执行即时转换 在本例中,如果我在using语句中进行转换,有几个问题: 1.它会创建两个对象吗? 2.如果适用,如果我调用
db.ExecuteReaderIDb(sSQL)
我可以立即将其分配给using语句,并在最后处理它,但我希望使用HasRows属性,这意味着我希望转换为System.Data.Common.DbDataReader
我的问题涉及对System.Data.Common.DbDataReader执行即时转换
在本例中,如果我在using语句中进行转换,有几个问题:
1.它会创建两个对象吗?
2.如果适用,如果我调用Dispose of the casted to,这两个对象都会被处理吗
否则,我是否需要2个using语句,一个返回IDataReader,另一个执行强制转换以确保所有内容都已正确清理。强制转换不会创建新对象
Using reader = db.ExecuteReaderIDb(sSQL)
Dim someOtherReader = CType(reader, System.Data.Common.DbDataReader)
' someOtherReader and reader point to the same object
' disposing reader will also dispose someOtherReader
End Using
你总是可以用正确的方式投球
Using reader = CType(db.ExecuteReaderIDb(sSQL), System.Data.Common.DbDataReader)
...
End Using
您有一个方法
ExecuteReaderIDb
,它返回什么?为什么不使用显示更多的代码,包括?也许这样会更清楚,你通常在哪里看到由于强制转换而创建的两个对象?它返回一个IDataReadern强制转换没有创建新对象。请考虑将该函数的返回类型改为DbDataReader,IDataReader并不是非常有用。术语“CAST”和其他地方一样在编程中使用。你有没有听过“用不同的眼光看待事物”这句话?它基本上意味着以不同的方式看待事物。编程中的角色转换就是这样工作的。您仍在处理同一个对象,但通过不同类型的引用访问它。您可以使用类似于的方法轻松地测试这一点,如果myThing是DirectCast(myThing,SomeType),那么
。如果该条件为True
,则显然没有创建新对象。无需询问您可以测试什么。谢谢…我在这里找到了更多信息。。。我只是想确定它是属于IDisposable的,这在.NET中是一个非常特殊的东西…谢谢