Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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# Can';不同的类是否有同名的扩展方法?_C#_.net_Extension Methods - Fatal编程技术网

C# Can';不同的类是否有同名的扩展方法?

C# Can';不同的类是否有同名的扩展方法?,c#,.net,extension-methods,C#,.net,Extension Methods,我有两种像这样的扩展方法 一是 public static BsonValue TopOne(this IEnumerable<BsonValue> IEnumBv) { } 这不可能吗?我没有理由 甚至名称都是相同的,但它适用于不同的扩展方法,对吗 或者如何做到这一点?两个分机我都需要一个名字,可以吗 更新 我得到了这个错误 以下方法或属性之间的调用不明确:“BsonExtensionLibrary.MongoExtensions.TopOne(MongoDB

我有两种像这样的扩展方法

一是

   public static BsonValue TopOne(this IEnumerable<BsonValue> IEnumBv)
   {

   }
这不可能吗?我没有理由

甚至名称都是相同的,但它适用于不同的扩展方法,对吗

或者如何做到这一点?两个分机我都需要一个名字,可以吗

更新

我得到了这个错误

以下方法或属性之间的调用不明确:“BsonExtensionLibrary.MongoExtensions.TopOne(MongoDB.Bson.BsonValue)”和“BsonExtensionLibrary.MongoExtensions.TopOne(System.Collections.Generic.IEnumerable)”


您完全可以这样做,但是如果您尝试对
BsonValue
IEnumerable
两种类型的对象调用扩展方法,就会遇到问题。例如:

BsonArray array = ...;
BsonValue top = array.TopValue();
您希望调用哪个方法?两者都适用,并且两种转换都不比另一种更好

请注意,这实际上与扩展方法无关——它只是重载解析。如果这些是正常的静态方法,您将面临完全相同的问题,并且您有:

BsonArray array = ...;
BsonValue top = BsonHelpers.TopValue(array);
要么给这两种方法取不同的名字,要么用某种方式表达你想要的,例如

BsonArray array = ...;
BsonValue topAsEnumerable = array.AsEnumerable().TopValue();
BsonValue topAsValue = ((BsonValue) array).TopValue();

(这是使用
Enumerable.AsEnumerable
扩展方法将表达式类型转换为
IEnumerable

您面临的问题是什么?你试过编译你的代码吗?是的,它不是编译。。上面写着名字在两者之间模棱两可。对不起,拼写错误是呀。。IEnumerable fine..警告:如果有两个扩展方法具有相同的名称,但接受不同的参数类型,则调用方将需要引用这些参数类型中每种类型的程序集,即使它们只使用一种。这有一个令人惊讶的效果:当您添加一个具有自己类型的新重载时,调用原始扩展方法的代码突然中断——它需要引用新重载的类型以确定哪种选择是最好的。
BsonArray array = ...;
BsonValue topAsEnumerable = array.AsEnumerable().TopValue();
BsonValue topAsValue = ((BsonValue) array).TopValue();