2

我有一个方法可以选择最后一个参数。

public static DataTable GetQueryResult<T>(string connectionString, string queryText, Dictionary<string, T> dicParameters = null)

当我尝试调用此方法时:

DBOperations.GetQueryResult(myConnectionString, myQuery);

它说方法'GetQueryResult'没有重载需要2个参数。

文档说明我只能将需要的参数传递给这种方法。

问候

4

5 回答 5

5

您必须明确指定T

DBOperations.GetQueryResult<YourType>(myConnectionString, myQuery);

当您指定 时dicParametersT是隐式的:

var dicParameters = new Dictionary<string, YourType>();
DBOperations.GetQueryResult(myConnectionString, myQuery, dicParameters );
于 2013-09-25T07:55:59.080 回答
4

在这种情况下,最好使用重载而不是默认参数。

正如您从其他答案中看到的那样,如果您使用默认参数并且调用者未指定它,那么他们将需要在调用中指定 T 的类型:

DBOperations.GetQueryResult<MyType>(myConnectionString, myQuery);

但是,因为如果字典为空(大概!),则不使用字典,因此调用者必须指定任意类型才能在未指定字典时调用函数是没有意义的。

所以你应该引入一个根本没有字典参数的重载,所以调用者不会有这个问题。

于 2013-09-25T08:02:22.010 回答
2

调用方法时可以指定类型

DBOperations.GetQueryResult<Person>(myConnectionString, myQuery);
于 2013-09-25T07:56:37.487 回答
2

T如果您不提供最后一个参数,编译器无法猜测是什么。

尝试使用显式调用您的方法T

DBOperations.GetQueryResult<Something>(myConnectionString, myQuery);
于 2013-09-25T07:56:55.190 回答
2
change the call from DBOperations.GetQueryResult(myConnectionString, myQuery); 
to e.g DBOperations.GetQueryResult<int>(myConnectionString, myQuery); or DBOperations.GetQueryResult<string>(myConnectionString, myQuery);  whatever data type you will be using for dictionary
于 2013-09-25T09:06:05.847 回答