2013-10-24 62 views
2

我有两个扩展方法,这样的..我们不能有不同类的扩展方法同名吗?

一个是

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

    } 

第二个是

public static BsonValue TopOne(this BsonValue IEnumBv) 
{ 

} 

这是不可能的?我没有理由。

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

或者如何做到这一点?我需要两个扩展名的topone名称。是否有可能?

UPDATE

我收到此错误

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

+1

什么问题你面对?你有没有试过编译你的代码? –

+0

是啊,它没有编译..它说名称是两者之间ambigous。 – shanmugharaj

+0

对不起它的拼写错误yaar .. IEnumerable罚款.. – shanmugharaj

回答

8

你可以绝对做到这一点 - 但如果你试图调用exten sion方法,它既是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>。)

+0

哦,得到它man.Yes是正确的。谢谢。 – shanmugharaj

相关问题