下面是对扩展方法的调用:
database.ExecuteScalar(command).NoNull<string>(string.Empty);
我得到一个扩展方法不明确的错误。我有两个DLL,它们使用相同的代码在不同的名称空间下实现NoNull(string str)。我如何显式引用一个名称空间?如果是同一个名称空间,我该怎么做呢?
NoNull(string str)
更新:我无法重写第三方DLL。
bxpogfeg1#
1.通过在源代码中重新定义或删除其中一个方法来消除歧义,不需要冗余。1.如果您不控制源代码,请通过using指令在类文件中仅包含其中一个。1.如果在给定的类文件中仍然需要这两个名称空间,则只需将所需的版本作为静态类调用来调用,通过(可能是完全限定的)类名明确地标识方法。
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
4dbbbstv2#
以防有人需要这个...如果具有相同名称的扩展方法的并发命名空间被包括在不同的级别(最内部包括的命名空间将具有优先级),则可以解决歧义。例如:
using Namespace1; namespace MyApplication { using Namespace2; ... db.Execute(); // Namespace2 Execute() will be called }
ffdz8vbo3#
我强烈建议您重命名其中一个扩展方法。根据您所做的其他事情,您可能只删除其中一个名称空间的using指令,但如果您需要两个名称空间来做其他事情,这将不会有帮助。(当然,这会导致建议将扩展方法放在它们自己的名称空间中。)不过,重命名可能会在总体上简化事情。
clj7thdc4#
你应该改变其中一个(或两个)的签名来区分它的功能。这看起来像是重复代码,除非它们做不同的事情。尽管如果它们做不同的事情,我认为你应该在名称中区分它们。我建议创建某种枚举(可能是一个标志)作为一个额外的参数传递给其中一个方法。
9nvpjoqh5#
在我的例子中,问题是,两个扩展方法都有相同的名称空间,比如Some.Namespace.Extensions,我无法控制,因此无法更改。不过它们都位于一个单独的类中,所以我通过编写using static Some.Namespace.Extensions.HostExtensions而不是using Some.Namespace.Extensions来解决这个问题,因为在静态类中使用using语句是不可能的。
Some.Namespace.Extensions
using static Some.Namespace.Extensions.HostExtensions
using Some.Namespace.Extensions
5条答案
按热度按时间bxpogfeg1#
1.通过在源代码中重新定义或删除其中一个方法来消除歧义,不需要冗余。
1.如果您不控制源代码,请通过
using
指令在类文件中仅包含其中一个。1.如果在给定的类文件中仍然需要这两个名称空间,则只需将所需的版本作为静态类调用来调用,通过(可能是完全限定的)类名明确地标识方法。
4dbbbstv2#
以防有人需要这个...
如果具有相同名称的扩展方法的并发命名空间被包括在不同的级别(最内部包括的命名空间将具有优先级),则可以解决歧义。
例如:
ffdz8vbo3#
我强烈建议您重命名其中一个扩展方法。根据您所做的其他事情,您可能只删除其中一个名称空间的
using
指令,但如果您需要两个名称空间来做其他事情,这将不会有帮助。(当然,这会导致建议将扩展方法放在它们自己的名称空间中。)不过,重命名可能会在总体上简化事情。clj7thdc4#
你应该改变其中一个(或两个)的签名来区分它的功能。这看起来像是重复代码,除非它们做不同的事情。尽管如果它们做不同的事情,我认为你应该在名称中区分它们。我建议创建某种枚举(可能是一个标志)作为一个额外的参数传递给其中一个方法。
9nvpjoqh5#
在我的例子中,问题是,两个扩展方法都有相同的名称空间,比如
Some.Namespace.Extensions
,我无法控制,因此无法更改。不过它们都位于一个单独的类中,所以我通过编写
using static Some.Namespace.Extensions.HostExtensions
而不是using Some.Namespace.Extensions
来解决这个问题,因为在静态类中使用using
语句是不可能的。