1
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)

4

4 回答 4

9

您的功能是通用的IK。签名必须是:

K ExecuteStoredProcedure<I, K>(...)
于 2013-03-16T22:43:35.010 回答
2

由于函数的输入参数是已知的,它不应该是通用的。只需制作参数Func<SqlDataReader, K> readFunction

于 2013-03-16T22:47:35.973 回答
1

顶部的静态方法仅声明一个类型参数,称为K. 你的意思是有两个,比如static K ExecuteStoredProcedure<I, K>( ... )?因为当您调用该方法时,您确实提供了两个类型参数。

编译器错误很清楚:您说Func<I, K>,但没有I定义类型。

于 2013-03-16T22:45:29.640 回答
0

你的读者只返回 Dictionary 以及你如何使用你的代码 K = Dictionary 所以你错过了 I 的值,也许你声明了错误的函数或者你需要修复返回值。

于 2013-03-16T22:49:32.883 回答