gpt4 book ai didi

c# - 我们不能为不同的类使用相同名称的扩展方法吗?

转载 作者:行者123 更新时间:2023-11-30 19:41:33 26 4
gpt4 key购买 nike

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

一个是

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

}

第二个是

 public static BsonValue TopOne(this BsonValue IEnumBv)
{

}

这不可能吗?我没有理由。

即使名称相同,但它适用于不同的扩展方法,对吗?

或者如何实现?我需要两个分机的 topone 名称。这可能吗?

更新

我收到这个错误

The call is ambiguous between the following methods or properties: 'BsonExtensionLibrary.MongoExtensions.TopOne(MongoDB.Bson.BsonValue)' and '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> 。)

关于c# - 我们不能为不同的类使用相同名称的扩展方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19559789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com