2010-11-19 30 views
6

將SqlDataReader強制轉換爲IDatareader最簡單的方法是什麼?如何將SqlDataReader轉換爲IDatareader

或者是更容易/可能列表<>對象轉換爲IDataReader的

+3

'SqlDataReader'已經實現了'IDataReader'。你可以發佈一些代碼來顯示你遇到的實際問題嗎? – 2010-11-19 14:02:15

回答

9

什麼是一個SqlDataReader轉換爲IDataReader的最簡單的方法

由於SqlDataReader實現IDataReader,這是隻是一個隱含的演員:

SqlDataReader typedReader = ... 
IDataReader untypedReader = typedReader; 
3

A SqlDataReaderIDataReader(它實現了接口),所以你根本不需要轉換它。你的代碼在任何地方都可以使用IDataReader,你可以使用Sql實現。

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

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

至於List<T>IDataReader:除了是枚舉這些做的非常不同的事情。最顯着的區別是數據讀取器提供對列數據的訪問(主要是因爲它實現了IDataRecord接口),這對大多數列表來說都沒有意義。

可以實現,提供訪問List<T>通過數據讀卡器接口適配器,但是這將是一個貧窮的配合和工作相當數量。

1

或者您也可以投它,但如前所述,除非您創建或使用通用界面,否則很大程度上是不必要的,因爲IDbDataReader的所有屬性和方法都可用於SqlDataReader

((IDbDataReader)typedReader).SomeMethod(); 
+2

這不是真正的拳擊(好吧,如果'SomeMethod'返回一個實現'IDbReader'的結構,它可能會,但似乎不太可能) – 2010-11-19 14:04:17

+0

@Marc,抱歉的錯字。我需要更多的parens。 – Brad 2010-11-19 14:06:37

+1

parens更好,但仍然不是拳擊...拳擊是當一個值類型被強制到一個引用類型的容器('對象'或通過泛型不受約束的接口) – 2010-11-19 14:08:43

3

什麼是一個 SqlDataReader對象轉換爲IDataReader的

不能在最簡單的方法。 A SqlDataReader CLASS不是IDataReader interfadce。

用於鑄造(分配給變量)使用

IDataReader untypedReader = typedReader; 

BUT:這不是一個轉換。這是一個演員。由於接口不能被實例化,所以轉換爲inteerface是不可能的。

相關問題