模糊扩展方法

时间:2011-12-12 13:13:17

标签: c# .net

我正在调用扩展方法:

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

我收到扩展方法不明确的错误。

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

我如何明确引用一个名称空间?

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

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

4 个答案:

答案 0 :(得分:43)

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

     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)

您应该更改其中一个(或两个)的签名,以区分它的作用。这似乎是代码重复,除非这些做不同的事情。虽然如果他们做不同的事情我会认为你会在名字中区分它们。我建议创建一些枚举(可能是一个标志)作为额外参数传递给其中一个方法。