2013-03-16 36 views
1
private static K ExecuteStoredProcedure<K>(string connectionString, string storedProcedure, SqlParameter[] parameters, Func<I, K> readFunction) 

實施例的使用通過如下所示:問題用C#」泛型,如何通過輸入和輸出經由函數求

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'找不到(您是否缺少使用指令或裝配參考?)

但我認爲它應該能夠引用?

更新:我試圖去尋找過於一般的東西,並沒有真正需要它。

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

回答

9

你的功能是在IK通用。簽名需要爲:

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

鉭,你剛剛發佈後算出來。給我我幾乎要成爲一個SqlDataReader我可能過於複雜! :) – Jamie 2013-03-16 22:48:34

1

您的靜態方法在頂部只聲明一個類型參數,稱爲K。你的意思是有兩個,比如static K ExecuteStoredProcedure<I, K>(...)?因爲當你調用該方法時,你確實提供了兩個類型參數。

編譯器錯誤很明顯:你說的是Func<I, K>,但是沒有一個類型是I定義的。

2

由於函數的輸入參數是已知的,它不應該是通用的。只需製作參數Func<SqlDataReader, K> readFunction即可。

0

你的讀者只返回字典和你如何使用你的代碼K =字典,所以你錯過了我的價值,也許你聲明不好的功能,或者你需要修復返回值。