重複の可能性:
ジェネリック メソッドのオーバーロードに関する問題
簡単なコードを次に示します。
static class Example
{
static int DoIt(object o) { return 0; }
class A { }
static int DoIt(A a) { return 1; }
static int CallDoIt<X>(X x) { return DoIt(x); }
static void Main()
{
var a = new A();
System.Console.WriteLine(DoIt(a)); // returns 1 (as desired)
System.Console.WriteLine(CallDoIt(a)); // returns 0
}
}
結果は非常に奇妙に見えます: 直接呼び出された関数 DoIt() は、別の関数から呼び出された場合とは異なる値を返します。C# で期待される動作ですか? はいの場合、目的の動作を実現する方法 (できればリフレクションなし)?