【问题标题】:Method signature is not recognized properly when calling it (No overload for method xxx takes 2 arguments)调用时无法正确识别方法签名(方法 xxx 没有重载需要 2 个参数)
【发布时间】:2015-01-13 17:18:38
【问题描述】:

我正在开发一些简单的实用程序,用于对存储过程、脚本等进行单元测试。我有这个扩展方法签名:

public static List<List<dynamic>> RunScript(this SqlConnection conn, string command, params object[] args)

这个尝试调用会以某种方式产生编译错误:

conn.RunScript("DELETE FROM BE_Resources WHERE CreatedByContactId = {0}", org);

其中orgint

错误 2 方法“RunScript”没有重载需要 2 个参数 C:\GIT\MainLine\tests\BE2.Database.Tests\GroupedAuthorizations\GroupedAuthorizationsUnitsTests.cs 171 13 BE2.Database.Tests

在代码中导航时,F-12 确实将我带到了这种方法。此外,shift F-12 产生的命中数与全局文本搜索相同。

我创建了一个新的扩展方法RunScriptTWO,现在我在尝试调用 that 时遇到编译错误 - 编译器找不到它。然后我破坏了我原来的 RunScript 方法,在名称旁边输入了一个 XXX。现在按 F-12 进行定义会中断,但项目可以编译,并且我的所有测试仍然通过。

我已经清理了我的解决方案并重新构建了很多次。 RunScript 方法的某种内部表示似乎已经过时了,我所有刷新它的尝试都失败了。

我无法通过更简单的示例重现此错误。 (即,对象的简单扩展方法采用字符串参数,params 数组工作正常)。

【问题讨论】:

  • 代码对我来说编译得很好。您需要提供可以复制问题的完整示例。
  • @Jamiec 没有编译,无法调试。
  • 对不起,这有点愚蠢,我的意思是当您从单元测试导航到代码时,它是否找到了您期望的方法。
  • 顺便说一句,我相信您已经听说过非参数化查询的危险。这种扩展方法似乎很适合这种危险。
  • @GrantWinney 如果是,它会使用不同的格式占位符。

标签: c# extension-methods


【解决方案1】:

根据评论链,这听起来像是您的一个或多个项目没有构建。您可以在 Build > Configuration Manager 下验证设置要构建的项目。

【讨论】:

    猜你喜欢
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多