我正在调用扩展方法:
database.ExecuteScalar(command).NoNull<string>(string.Empty);
我收到扩展方法不明确的错误。
我有两个dll使用相同的代码在不同的命名空间下实现NoNull(string str)
。
我如何明确引用一个名称空间?
如果它是相同的命名空间,我将如何完成它?
更新:我无法重写第三方dll。
答案 0 :(得分:43)
using
指令在您的类文件中只包含其中一个。-
Abc.Xyz.ExtensionsClass.NoNull(database.ExecuteScalar(), string.Empty);
答案 1 :(得分:13)
以防有人需要这个...
如果具有相同名称的扩展方法的并发命名空间包含在不同级别(大多数内部包含的命名空间将具有优先级),则可以解决歧义。
例如:
using Namespace1;
namespace MyApplication
{
using Namespace2;
...
db.Execute(); // Namespace2 Execute() will be called
}
答案 2 :(得分:8)
我强烈建议你重命名其中一个扩展方法。根据您的其他操作,您可以可能删除其中一个命名空间的using
指令,但如果您需要其他命名空间,则无效。 (当然,这会导致建议将扩展方法放在自己的命名空间中。)重命名通常可以简化一些事情。
答案 3 :(得分:0)
您应该更改其中一个(或两个)的签名,以区分它的作用。这似乎是代码重复,除非这些做不同的事情。虽然如果他们做不同的事情我会认为你会在名字中区分它们。我建议创建一些枚举(可能是一个标志)作为额外参数传递给其中一个方法。