3

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

一个是

   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)

4

1 回答 1

10

你绝对可以这样做——但是如果你尝试在 aBsonValue an 的东西上调用扩展方法,你就会遇到问题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>

于 2013-10-24T07:42:28.613 回答