簡體   English   中英

C#泛型的問題,如何通過Func傳遞輸入和輸出

[英]Issue with C#' generics, how to pass through input and output via a Func

private static K ExecuteStoredProcedure<K>(string connectionString, string storedProcedure, SqlParameter[] parameters, Func<I, K> readFunction)

用法示例如下所示:

 return ExecuteStoredProcedure<SqlDataReader, Dictionary<string, string>>(
     connectionString, 
     "uspSearchStatisticsSelectByTokenPerDayGroupByDate", 
     parameters, 
     (reader) =>
     {
         reader.Read();
         int readCount = reader.FieldCount;

         Dictionary<string, string> results = new Dictionary<string, string>();
         results.Add("FailedRequests", Convert.ToString(reader[5]));
         results.Add("TotalRequests", Convert.ToString(reader[4]));
         results.Add("AverageResponseTime", Convert.ToString(reader[3]));

         return results;
     }
 );

編譯器返回

錯誤520找不到類型或名稱空間名稱“ I”(您是否缺少using指令或程序集引用?)

但我認為應該可以引用嗎?

更新:我試圖去做一些太普通的東西,實際上並不需要它。

我已經處理了以下... private static K ExecuteStoredProcedure<K>(string connectionString, string storedProcedure, SqlParameter[] parameters, Func<SqlDataReader, K> readFunction)

您的函數在IK是通用的。 簽名必須是:

K ExecuteStoredProcedure<I, K>(...)

由於該函數的輸入參數是已知的,因此不應為通用參數。 只需將參數Func<SqlDataReader, K> readFunction

頂部的靜態方法僅聲明一個類型參數,稱為K 您是說要有兩個,例如static K ExecuteStoredProcedure<I, K>( ... ) 因為調用該方法時,您確實提供了兩個類型參數。

編譯器錯誤非常明顯:您說的是Func<I, K> ,但I定義的類型都不存在。

您的讀者僅返回的是Dictionary以及有關如何使用代碼K = Dictionary的信息,因此您缺少I的值,也許您聲明了錯誤的功能,或者需要固定返回值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM