【发布时间】: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);
其中org 是int。
错误 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