如果我选择不同的通用限制,为什么不能使用相同的参数重载方法?

Dis*_*ive 3 .net c# generics overloading c#-4.0

如果我在c#4.0 .NET中这样做

    private static void myMethod<T>(int obj) where T : IDictionary
    {


    }

    private static void myMethod<T>(int obj) where T : ICollection
    {


    }
Run Code Online (Sandbox Code Playgroud)

我收到以下错误.

类型'ConsoleApplication1.Program'已经定义了一个名为'myMethod'的成员,它具有相同的参数类型

我想知道为什么?据我所知,这两种方法都可以毫无歧义地调用?

如果我想要第一种方法,我会这样做

myMethod<IDictionary>(50)
Run Code Online (Sandbox Code Playgroud)

和第二种方法

myMethod<ICollection>(40)
Run Code Online (Sandbox Code Playgroud)

我错过了什么样的情景?有没有办法实现一组具有相同参数但不同类型的重载方法?

Bro*_*ass 9

C#中的重载分辨率根本不考虑约束.

从C#规范:

7.5.3过载分辨率

重载决策是一种绑定时机制,用于在给定参数列表和一组候选函数成员的情况下选择要调用的最佳函数成员.

@Anthony Pegram的博客链接是关于该主题的更好的阅读: 约束不是签名的一部分