gpt4 book ai didi

c# - 扩展方法冲突

转载 作者:行者123 更新时间:2023-11-30 16:48:14 25 4
gpt4 key购买 nike

<分区>

我有两种接口(interface)扩展方法,一种对实现该接口(interface)的类的实例执行操作,另一种对实现该接口(interface)的类集合执行操作。问题是编译器总是使用第一个扩展方法,这会产生编译错误,所以我不能使用集合版本。

public interface ISomeInterface
{
}

public class SomeClass : ISomeInterface
{
}

public static class SomeClassExtensions
{
public static T DoSomething<T>(this T item) where T : class, ISomeInterface
{
return item;
}

public static IEnumerable<T> DoSomething<T>(this IEnumerable<T> items) where T : class, ISomeInterface
{
return items;
}
}

internal class Program
{
private static void Main()
{
var items = new[]
{
new SomeClass()
};

items.DoSomething(); // compiler error
}
}

错误很明显,编译器正在尝试使用第一种扩展方法:

The type 'ConsoleApplication1.SomeClass[]' cannot be used as type parameter 'T' in the generic type or method 'SomeClassExtensions.DoSomething(T)'. There is no implicit reference conversion from 'ConsoleApplication1.SomeClass[]' to 'ConsoleApplication1.ISomeInterface'.

很明显,我可以重命名这两种扩展方法中的一种,但这是最后的手段,因为这是针对开源项目的,我试图避免偏离一套既定的命名约定。

我不知道如何强制我需要工作的东西,也许有一种方法可以添加或调整通用类型约束?

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