小编Sta*_*tan的帖子

约束扩展方法产生了暧昧的呼叫

假设我们有两个不相关的接口

public interface IFirst
{

}

public interface ISecond
{

}
Run Code Online (Sandbox Code Playgroud)

和扩展方法具有相同的名称但受限于每个接口.

public static class IFirstExtensions
{
    public static void DoIt<TFirst>(this TFirst model)
        where TFirst : IFirst
    {

    }
}

public static class ISecondExtensions
{
    public static void DoIt<TSecond>(this TSecond model)
        where TSecond : ISecond
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用IFirst实例时:

IFirst first = ...;
first.DoIt();
Run Code Online (Sandbox Code Playgroud)

然后我得到错误:

"CS0121以下方法或属性之间的调用不明确:'IFirstExtensions.DoIt(TFirst)'和'ISecondExtensions.DoIt(TSecond)'".

这很奇怪.看起来这两种方法在此范围内都可见.但如果我给它们命名不同,例如:

public static class IFirstExtensions
{
    public static void DoFirst<TFirst>(this TFirst model)
        where TFirst : IFirst
    {

    }
}

public static class ISecondExtensions
{ …
Run Code Online (Sandbox Code Playgroud)

c# generics

3
推荐指数
1
解决办法
79
查看次数

标签 统计

c# ×1

generics ×1