C# 如何将SqlDataReader转换/转换为IDatareader

C# 如何将SqlDataReader转换/转换为IDatareader,c#,.net,idatareader,C#,.net,Idatareader,将SqlDataReader强制转换为IDatareader的最简单方法是什么 或者将列表对象转换为IDataReader是否更容易/可能 将SqlDataReader转换为IDatareader的最简单方法是什么 由于SqlDataReader实现了IDataReader,这只是一个隐式转换: SqlDataReader typedReader = ... IDataReader untypedReader = typedReader; SqlDataReader是一个IDataReader

将SqlDataReader强制转换为IDatareader的最简单方法是什么

或者将列表对象转换为IDataReader是否更容易/可能

将SqlDataReader转换为IDatareader的最简单方法是什么

由于
SqlDataReader
实现了
IDataReader
,这只是一个隐式转换:

SqlDataReader typedReader = ...
IDataReader untypedReader = typedReader;

SqlDataReader
是一个
IDataReader
(它实现了接口),因此您根本不需要转换它。只要代码需要
IDataReader
,就可以使用Sql实现

// Given a method with this signature
public void ProcessData(IDataReader reader);

// You can do this
SqlDataReader sqlReader = command.ExecuteReader();
ProcessData(sqlReader);

至于
List
IDataReader
:除了可枚举之外,它们做的事情非常不同。最显著的区别是数据读取器提供了对列数据的访问(主要是因为它实现了
IDataRecord
接口),这对于大多数列表来说没有意义


您可以实现一个适配器,通过数据读取器接口访问
列表
,但这将是一个不合适的接口,并且需要大量的工作。

或者您可以直接转换它,但正如前面所述,除非您正在创建或使用通用接口,否则它基本上是不必要的,因为
IDbDataReader
的所有属性和方法都可用于
SqlDataReader

((IDbDataReader)typedReader).SomeMethod();
转换文件的最简单方法是什么 SqlDataReader到IDatareader

你不能。
SqlDataReader
类不是
IDataReader
interfadce

用于铸造(分配给变量)使用


但是:这不是一种转换。这是演员阵容。由于无法实例化接口,因此无法根据定义将其转换为INTERFACE。

SqlDataReader
已实现
IDataReader
。您可以发布一些代码来显示您遇到的实际问题吗?这不是真正的装箱(如果
SomeMethod
返回一个实现
IDbReader
的结构,可能会,但似乎不太可能)@Marc,很抱歉输入错误。我需要更多的帕伦斯。帕伦斯更好,但那仍然不是拳击。。。装箱是指将值类型强制放入引用类型容器(
对象
或不受泛型约束的接口)@Marc,啊。。。没错。我已更新为
cast
而不是
box
。谢谢那更合适吗?
IDataReader untypedReader = typedReader;