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中解决歧义的地方