我们不能为不同的类使用同名的扩展方法吗?

本文关键字:扩展 方法 不能 我们 | 更新日期: 2023-09-27 18:36:36

我有两个这样的扩展方法。

一个是

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

第二个是

 public static BsonValue TopOne(this BsonValue IEnumBv)
 {
 }

这不可能吗?我不明白道理。

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

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

更新

我收到此错误

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

我们不能为不同的类使用同名的扩展方法吗?

你绝对可以这样做 - 但是如果你尝试在既BsonValueIEnumerable<BsonValue>的东西上调用扩展方法,你就会遇到问题。例如:

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<BsonValue>