模糊扩展方法

Ela*_*nda 41 .net c#

我正在调用扩展方法:

database.ExecuteScalar(command).NoNull<string>(string.Empty);
Run Code Online (Sandbox Code Playgroud)

我得到一个错误,扩展方法是不明确的.

我有两个dll具有相同的代码,NoNull(string str)在不同的命名空间下实现.

我怎样才能明确引用一个名称空间?

如果它是相同的命名空间,我将如何完成它?

更新:我无法重写第三方dll.

Ant*_*ram 58

  1. 通过重新定义或消除源中的一种方法来消除歧义.您不需要冗余.
  2. 如果您不控制源,请通过using指令在类文件中只包含其中一个.
  3. 如果在给定的类文件中仍然需要两个名称空间,则只需调用您希望的版本作为静态类调用,通过完全限定的类名明确地标识该方法.

-

 Abc.Xyz.ExtensionsClass.NoNull(database.ExecuteScalar(), string.Empty);
Run Code Online (Sandbox Code Playgroud)


pak*_*_by 17

以防有人需要这个......

如果具有相同名称的扩展方法的concurrect名称空间包含在不同级别(大多数内部包含的名称空间将具有优先级),则可以解决歧义.

例如:

using Namespace1;
namespace MyApplication 
{
    using Namespace2;
    ...
    db.Execute(); // Namespace2 Execute() will be called
}
Run Code Online (Sandbox Code Playgroud)

  • 非常好。似乎对于99%的情况来说是一个足够好的解决方案,对于同一类中的两个(或更多)方法对,您需要以两种不同的方式解决歧义的1%,因为我所需要做的就是解决morelinq预测Linq的功能开发(已添加ToHashSet)。它很棒。 (2认同)

Jon*_*eet 9

强烈建议您重命名其中一种扩展方法.根据您的其他操作,您可能只需删除using其中一个命名空间的指令,但如果您需要其他命名空间,则无效.(当然,这会导致建议将扩展方法放在它们自己的命名空间中.)重命名通常可以简化一些事情.

  • @demoncodemonkey:哦,我假设它实际上做了微妙的不同的事情.如果它是相同的代码,那么显然它应该在一个程序集(和命名空间)中. (2认同)
  • @demoncodemonkey:如果它是相同的函数,相同的代码,不同的命名空间,那么它就是一个很大的代码味道. (2认同)