我们不能为不同的类使用同名的扩展方法吗?
本文关键字:扩展 方法 不能 我们 | 更新日期: 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)
你绝对可以这样做 - 但是如果你尝试在既BsonValue
又是IEnumerable<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>
。