Общее разрешение перегрузки

У меня есть следующий сценарий:

class Foo { }

class Foo<T> : Foo { }

И затем два метода

void DoStuff(Foo foo) 
{
     DoStuffImpl(foo);
}

void DoStuffImpl(Foo foo) 
{ 
     Console.WriteLine("A");
}    
void DoStuffImpl<T>(Foo<T> foo) 
{ 
     Console.WriteLine("B");
} 

void Main() 
{
     DoStuff(new Foo<int>()); // prints A
}

(обратите внимание, код был написан в браузере, но описывает ситуацию, в которой я облицовка)

Как я могу заставить его вызвать общий метод и вывести B?

Можно ли это вообще сделать без отражения? У меня есть несколько идей о том, как это можно сделать с помощью отражения, но я ищу более чистое решение, если оно существует.

Примечание: я не могу сделать DoStuff универсальным, потому что он будет использоваться с WCF и открытые универсальные типы не допускаются.

7
задан andreialecu 9 September 2010 в 17:12
поделиться