我有两个这样的扩展方法..
一个是
public static BsonValue TopOne(this IEnumerable<BsonValue> IEnumBv)
{
}
第二个是
public static BsonValue TopOne(this BsonValue IEnumBv)
{
}
这不可能吗?我没有理由。
甚至名称是相同的,但它对于不同的扩展方法是对的吗?
或者如何实现这一目标?我需要两个扩展名的topone名称。这可能吗?
更新
我收到此错误
以下方法或属性之间的调用不明确:&#39; BsonExtensionLibrary.MongoExtensions.TopOne(MongoDB.Bson.BsonValue)&#39;和&#39; BsonExtensionLibrary.MongoExtensions.TopOne(System.Collections.Generic.IEnumerable)
答案 0 :(得分:8)
您绝对可以这样做 - 但如果您尝试在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>
。)