可选参数无法正常工作

时间:2013-09-25 07:53:58

标签: c# .net function reflection optional-parameters

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

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

当我尝试将此方法称为:

DBOperations.GetQueryResult(myConnectionString, myQuery);

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

This文档解释说我只能将所需的参数传递给这种方法。

此致

5 个答案:

答案 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