【问题标题】:Optional parameter not working correctly可选参数无法正常工作
【发布时间】:2013-09-25 07:53:58
【问题描述】:

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

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

当我尝试调用这个方法时:

DBOperations.GetQueryResult(myConnectionString, myQuery);

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

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

问候

【问题讨论】:

  • @nuke 错了。 null 可以用作默认参数值。

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


【解决方案1】:

您必须明确指定T

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

当您指定dicParameters 时,T 是隐含的:

var dicParameters = new Dictionary<string, YourType>();
DBOperations.GetQueryResult(myConnectionString, myQuery, dicParameters );

【讨论】:

  • 每个答案都差不多。谢谢!我现在明白了:)
【解决方案2】:

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

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

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

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

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

【讨论】:

    【解决方案3】:

    调用方法时可以指定类型

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:
        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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-08-03
          • 2014-02-22
          • 1970-01-01
          • 1970-01-01
          • 2016-03-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多