Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模糊扩展方法_C#_.net - Fatal编程技术网

C# 模糊扩展方法

C# 模糊扩展方法,c#,.net,C#,.net,我正在对扩展方法进行以下调用: database.ExecuteScalar(command).NoNull<string>(string.Empty); database.ExecuteScalar(command).NoNull(string.Empty); 我得到一个错误,扩展方法不明确 我有两个具有相同代码的DLL,它们在不同的名称空间下实现了NoNull(string str) 如何显式地引用一个命名空间 如果它是相同的名称空间,我会怎么做 更新:我无法重写第三方DLL

我正在对扩展方法进行以下调用:

database.ExecuteScalar(command).NoNull<string>(string.Empty);
database.ExecuteScalar(command).NoNull(string.Empty);
我得到一个错误,扩展方法不明确

我有两个具有相同代码的DLL,它们在不同的名称空间下实现了
NoNull(string str)

如何显式地引用一个命名空间

如果它是相同的名称空间,我会怎么做


更新:我无法重写第三方DLL。我强烈建议您重命名其中一个扩展方法。根据您执行的其他操作,您可能只需删除其中一个名称空间的
using
指令,但如果您需要两个名称空间来完成其他任务,则这将没有帮助。(当然,这会导致建议将扩展方法放在它们自己的名称空间中。)不过,重命名通常可能会简化事情。

我强烈建议您重命名其中一个扩展方法。根据您执行的其他操作,您可能只需删除其中一个名称空间的
using
指令,但如果您需要两个名称空间来完成其他任务,则这将没有帮助。(当然,这会导致建议将扩展方法放在它们自己的名称空间中。)不过,重命名通常可能会简化事情。

您应该更改其中一个(或两个)的签名,以区分它的功能。这看起来像是代码的重复,除非它们做不同的事情。但是如果他们做了不同的事情,我想你会在名字上有所区别。我建议创建某种枚举(可能是一个标志)作为一个额外参数传递给其中一个方法。

您应该更改其中一个(或两个)的签名,以区分它的功能。这看起来像是代码的重复,除非它们做不同的事情。但是如果他们做了不同的事情,我想你会在名字上有所区别。我建议创建某种枚举(可能是一个标志)作为额外参数传递给其中一个方法

  • 通过在源位置重新定义或消除其中一种方法来消除歧义。你不需要裁员
  • 如果不控制源代码,请通过
    using
    指令在类文件中仅包含其中一个
  • 如果在给定的类文件中仍然需要两个名称空间,只需将所需的版本作为静态类调用调用,通过完全限定的类名明确地标识该方法
  • -

  • 通过在源位置重新定义或消除其中一种方法来消除歧义。你不需要裁员
  • 如果不控制源代码,请通过
    using
    指令在类文件中仅包含其中一个
  • 如果在给定的类文件中仍然需要两个名称空间,只需将所需的版本作为静态类调用调用,通过完全限定的类名明确地标识该方法
  • -


    万一有人需要这个

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

    例如:

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

    万一有人需要这个

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

    例如:

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

    我认为使用您想要使用的类(my.Lib1.class或my.Lib2.class)的完整命名约定将解决您的第一个问题。如果您具有相同的asm名称/版本/区域性/等,则必须创建多个AppDomain,因为这些AppDomain不能加载到同一个域中。@Marvin Smit:使用扩展方法,您不能像使用类那样通过显式命名空间将方法限制为一个命名空间。
    NoNull
    也是一个非常奇怪的函数。是否要使用空合并运算符
    ?为什么有两个函数包含相同的代码?我认为使用要使用的类(my.Lib1.class或my.Lib2.class)的完整命名约定将解决您的第一个问题。如果您具有相同的asm名称/版本/区域性/等,则必须创建多个AppDomain,因为这些AppDomain不能加载到同一个域中。@Marvin Smit:使用扩展方法,您不能像使用类那样通过显式命名空间将方法限制为一个命名空间。
    NoNull
    也是一个非常奇怪的函数。是否要使用空合并运算符
    ?为什么有两个函数包含相同的代码?可能是同一个函数具有相同的代码,重命名或更改签名更可能会增加混淆,而不是简化。@demoncodemonkey:哦,我假设它实际上做了微妙的不同事情。如果是相同的代码,那么显然它应该在单个程序集中(和命名空间)。@demoncodemonkey:如果是相同的函数、相同的代码、不同的命名空间,那么这就是一种很大程度上的代码味道。可能是同一个函数具有相同的代码,重命名或更改签名更有可能增加混乱,而不是简化。@demoncodemonkey:哦,我想它实际上做了一些微妙的不同的事情。如果是相同的代码,那么显然它应该在一个程序集(和命名空间)中。@demoncodemonkey:如果是相同的函数、相同的代码、不同的命名空间,那么代码的味道很大。非常好。对于99%的情况来说,这似乎是一个足够好的解决方案,在1%的情况下,对于同一个类中的两个(或更多)方法对,您需要以两种不同的方式解决歧义,因为我所需要的是解决更多的Linq问题,预测Linq的特性开发(添加ToHashSet)。很好用,很好。对于99%的情况来说,这似乎是一个足够好的解决方案,1%将是您需要在两个不同的wa中解决歧义的地方