我们不能为不同的类提供相同名称的扩展方法吗?

sha*_*raj 2 .net c# extension-methods

我有两个像这样的扩展方法..

一个是

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

   }
Run Code Online (Sandbox Code Playgroud)

第二个是

 public static BsonValue TopOne(this BsonValue IEnumBv)
 {

 }
Run Code Online (Sandbox Code Playgroud)

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

即使名称相同,但它对于不同的扩展方法是正确的吗?

或者如何实现这一目标?我需要两个扩展名的topone名称.这可能吗?

UPDATE

我收到了这个错误

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

Jon*_*eet 8

您完全可以做到这一点-但如果你试图调用的东西扩展方法,既是你有问题,BsonValue 一个IEnumerable<BsonValue>.例如:

BsonArray array = ...;
BsonValue top = array.TopValue();
Run Code Online (Sandbox Code Playgroud)

您希望调用哪种方法?两者都适用,转换都不比另一个好.

请注意,这与扩展方法无关 - 它只是重载决策.如果这些是普通的静态方法,你将遇到完全相同的问题,并且你有:

BsonArray array = ...;
BsonValue top = BsonHelpers.TopValue(array);
Run Code Online (Sandbox Code Playgroud)

要么给这两种方法赋予不同的名称,要么找到一些表达你想要的方法,例如

BsonArray array = ...;
BsonValue topAsEnumerable = array.AsEnumerable().TopValue();
BsonValue topAsValue = ((BsonValue) array).TopValue();
Run Code Online (Sandbox Code Playgroud)

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