[英]Ambiguous extension method
我正在对扩展方法进行以下调用:
database.ExecuteScalar(command).NoNull<string>(string.Empty);
我收到扩展方法不明确的错误。
我有两个具有相同代码的 dll,它们在不同的命名空间下实现NoNull(string str)
。
如何明确引用一个名称空间?
如果它是相同的命名空间,我将如何完成它?
更新:我无法重写第 3 方 dll。
using
指令在类文件中仅包含其中之一。 Abc.Xyz.ExtensionsClass.NoNull(database.ExecuteScalar(), string.Empty);
// <Abc.Xyz.> is only necessary if the classes themselves match names
// if not, only <ClassName>.<MethodName> is needed
以防万一有人需要这个......
如果具有相同名称的扩展方法的并发命名空间包含在不同级别(大多数内部包含的命名空间将具有优先权),则可以解决歧义。
例如:
using Namespace1;
namespace MyApplication
{
using Namespace2;
...
db.Execute(); // Namespace2 Execute() will be called
}
我强烈建议您重命名其中一种扩展方法。 根据您所做的其他事情,您可能只需删除这些名称空间之一的using
指令,但如果您需要两个名称空间来做其他事情,那将无济于事。 (当然,这导致建议将扩展方法放在它们自己的命名空间中。)不过,重命名可能会简化一般的事情。
在我的例子中,问题是,这两种扩展方法都具有相同的名称空间,如Some.Namespace.Extensions
,我无法控制,因此无法更改。
不过,它们各自位于一个单独的 class 中。 所以我通过using static Some.Namespace.Extensions.HostExtensions
而不是using Some.Namespace.Extensions
来解决它,因为使用带有 static class 的using
语句是不可能的。
您应该更改一个(或两个)的签名以区分它的作用。 这似乎是某处的代码重复,除非它们做不同的事情。 虽然如果他们做不同的事情,我认为你会在名称中区分它们。 我建议创建某种枚举(可能是一个标志)作为一个额外的参数传递给其中一个方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.