.net 模糊扩展方法

5sxhfpxr  于 2023-01-27  发布在  .NET
关注(0)|答案(5)|浏览(94)

下面是对扩展方法的调用:

database.ExecuteScalar(command).NoNull<string>(string.Empty);

我得到一个扩展方法不明确的错误。
我有两个DLL,它们使用相同的代码在不同的名称空间下实现NoNull(string str)
我如何显式引用一个名称空间?
如果是同一个名称空间,我该怎么做呢?

更新:我无法重写第三方DLL。

bxpogfeg

bxpogfeg1#

1.通过在源代码中重新定义或删除其中一个方法来消除歧义,不需要冗余。
1.如果您不控制源代码,请通过using指令在类文件中仅包含其中一个。
1.如果在给定的类文件中仍然需要这两个名称空间,则只需将所需的版本作为静态类调用来调用,通过(可能是完全限定的)类名明确地标识方法。

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
4dbbbstv

4dbbbstv2#

以防有人需要这个...
如果具有相同名称的扩展方法的并发命名空间被包括在不同的级别(最内部包括的命名空间将具有优先级),则可以解决歧义。
例如:

using Namespace1;
namespace MyApplication 
{
    using Namespace2;
    ...
    db.Execute(); // Namespace2 Execute() will be called
}
ffdz8vbo

ffdz8vbo3#

我强烈建议您重命名其中一个扩展方法。根据您所做的其他事情,您可能只删除其中一个名称空间的using指令,但如果您需要两个名称空间来做其他事情,这将不会有帮助。(当然,这会导致建议将扩展方法放在它们自己的名称空间中。)不过,重命名可能会在总体上简化事情。

clj7thdc

clj7thdc4#

你应该改变其中一个(或两个)的签名来区分它的功能。这看起来像是重复代码,除非它们做不同的事情。尽管如果它们做不同的事情,我认为你应该在名称中区分它们。我建议创建某种枚举(可能是一个标志)作为一个额外的参数传递给其中一个方法。

9nvpjoqh

9nvpjoqh5#

在我的例子中,问题是,两个扩展方法都有相同的名称空间,比如Some.Namespace.Extensions,我无法控制,因此无法更改。
不过它们都位于一个单独的类中,所以我通过编写using static Some.Namespace.Extensions.HostExtensions而不是using Some.Namespace.Extensions来解决这个问题,因为在静态类中使用using语句是不可能的。

相关问题