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 に答える