我有一个方法可选择接受最后一个参数。
public static DataTable GetQueryResult<T>(string connectionString, string queryText, Dictionary<string, T> dicParameters = null)
当我尝试将此方法称为:
DBOperations.GetQueryResult(myConnectionString, myQuery);
它表示方法'GetQueryResult'没有重载需要2个参数。
This文档解释说我只能将所需的参数传递给这种方法。
此致
答案 0 :(得分:5)
您必须明确指定T
:
DBOperations.GetQueryResult<YourType>(myConnectionString, myQuery);
指定dicParameters
时,T
是隐含的:
var dicParameters = new Dictionary<string, YourType>();
DBOperations.GetQueryResult(myConnectionString, myQuery, dicParameters );
答案 1 :(得分:4)
在这种情况下,最好是重载而不是默认参数。
从其他答案中可以看出,如果你使用默认参数而调用者没有指定它,那么他们需要在调用中指定T的类型:
DBOperations.GetQueryResult<MyType>(myConnectionString, myQuery);
但是,因为如果它是null(大概是!),所以不使用该字典,那么调用者必须指定一个任意类型,以便在不指定字典时调用该函数。
因此,您应该引入一个根本没有字典参数的重载,因此调用者不会遇到这个问题。
答案 2 :(得分:2)
您可以在调用方法时指定类型
DBOperations.GetQueryResult<Person>(myConnectionString, myQuery);
答案 3 :(得分:2)
如果您不提供最后一个参数,编译器无法猜出T
是什么。
尝试使用明确的T
调用您的方法:
DBOperations.GetQueryResult<Something>(myConnectionString, myQuery);
答案 4 :(得分: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