將SqlDataReader強制轉換爲IDatareader最簡單的方法是什麼?如何將SqlDataReader轉換爲IDatareader
或者是更容易/可能列表<>對象轉換爲IDataReader的
將SqlDataReader強制轉換爲IDatareader最簡單的方法是什麼?如何將SqlDataReader轉換爲IDatareader
或者是更容易/可能列表<>對象轉換爲IDataReader的
什麼是一個SqlDataReader轉換爲IDataReader的最簡單的方法
由於SqlDataReader
實現IDataReader
,這是隻是一個隱含的演員:
SqlDataReader typedReader = ...
IDataReader untypedReader = typedReader;
A 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<T>
和IDataReader
:除了是枚舉這些做的非常不同的事情。最顯着的區別是數據讀取器提供對列數據的訪問(主要是因爲它實現了IDataRecord
接口),這對大多數列表來說都沒有意義。
您可以實現,提供訪問List<T>
通過數據讀卡器接口適配器,但是這將是一個貧窮的配合和工作相當數量。
或者您也可以投它,但如前所述,除非您創建或使用通用界面,否則很大程度上是不必要的,因爲IDbDataReader
的所有屬性和方法都可用於SqlDataReader
。
((IDbDataReader)typedReader).SomeMethod();
這不是真正的拳擊(好吧,如果'SomeMethod'返回一個實現'IDbReader'的結構,它可能會,但似乎不太可能) – 2010-11-19 14:04:17
@Marc,抱歉的錯字。我需要更多的parens。 – Brad 2010-11-19 14:06:37
parens更好,但仍然不是拳擊...拳擊是當一個值類型被強制到一個引用類型的容器('對象'或通過泛型不受約束的接口) – 2010-11-19 14:08:43
什麼是一個 SqlDataReader對象轉換爲IDataReader的
不能在最簡單的方法。 A SqlDataReader
CLASS不是IDataReader
interfadce。
用於鑄造(分配給變量)使用
IDataReader untypedReader = typedReader;
BUT:這不是一個轉換。這是一個演員。由於接口不能被實例化,所以轉換爲inteerface是不可能的。
'SqlDataReader'已經實現了'IDataReader'。你可以發佈一些代碼來顯示你遇到的實際問題嗎? – 2010-11-19 14:02:15