У меня есть следующий сценарий:
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 и открытые универсальные типы не допускаются.