2

是否可以在 C# 中将泛型传递给重载方法,并使其解析为该方法的非泛型版本?例如:

class Program {
    static void Main(string[] args) {
        A a = new A();

        Process(a);
        Console.ReadLine();
    }

    static void Process<T>(T item) {
        Writer(item);
    }

    // Writer methods...

    static void Writer<T>(T item) {
        Console.WriteLine("Type: " + item.GetType());
        Console.WriteLine("You lose");
    }

    static void Writer(A item) {
        item.Write();
    }
}   

class A {
    public void Write() {
        Console.WriteLine("You found me!");
    }
}

此代码输出:

类型:Foo.A

你输了

我想看看:

你发现我了!

有没有办法做到这一点,或类似的东西?我正在使用 C# 4。

4

1 回答 1

5

您可以使用dynamic将重载决议推迟到运行时:

static void Process<T>(T item)
{
    dynamic d = item;
    Writer(d);
}
于 2012-08-15T22:07:02.847 回答