小编Mos*_*evi的帖子

通用方法解决方案

请考虑以下代码:

public class Tests
{
    public void Test()
    {
        Assert.AreEqual("Int", DoSomething(1));
    }

    public static string DoSomething<T>(T value)
    {
        return "Generic";
    }

    public static string DoSomething(int value)
    {
        return "Int";
    }
}
Run Code Online (Sandbox Code Playgroud)

正如所料,将调用非泛型的DoSomething方法.现在考虑以下修改:

public class Tests
{
    public void Test()
    {
        Assert.AreEqual("Int", DoSomething(1));
    }

    public static string DoSomething<T>(T value)
    {
        return "Generic";
    }

    public static string DoSomething<T>(int value)
    {
        return "Int";
    }
}
Run Code Online (Sandbox Code Playgroud)

我唯一改变的是将T类型参数添加到第二个重载,从而使其成为通用的.请注意,不使用type参数.

该修改导致调用第一个DoSomething方法.为什么?编译器具有所需的所有信息,以便选择第二种方法.

你能解释为什么,甚至更好地指出我解释这种行为的C#规范部分?

c# generics overload-resolution

5
推荐指数
1
解决办法
276
查看次数

什么是委托以及它如何允许创建对象

如果委托是抽象的,那么它如何允许创建对象

.net c# c#-3.0

2
推荐指数
1
解决办法
170
查看次数

标签 统计

c# ×2

.net ×1

c#-3.0 ×1

generics ×1

overload-resolution ×1