Это простой надуманный пример, но, надеюсь, проиллюстрирует мой запрос.
public class Test
{
public string Name = "test";
}
public static class Ext
{
public static Test ConvertToTest<T1>(this T1 source)
{
return new Test();
}
public static T2 Convert<T1,T2>(this T1 source) where T2 : new()
{
return new T2();
}
}
Для ConvertToTest нужен только один тип, поэтому следующая компиляция
Ext.ConvertToTest<string>("hello");
"hello".ConvertToTest();
В последнем используется тип-Интерфейс и это означает, что он также работает с анонимными классами, например
var anon = (new { Name = "test" }) ;
anon.ConvertToTest();
Однако это жестко закодировано, чтобы всегда использовать класс Test, тогда как я хочу иметь возможность указать тип, как во втором методе
Я могу написать
Ext.Convert<string, Test>("hello");
, и это компилируется, потому что я знаю оба типа во время компиляции, но я не могу использовать его с анонимными классами, и я не могу найти способ использования типа-inference плюс дополнительный тип
Было бы неплохо, если бы я мог сделать что-то вроде
anon.Convert<,Test>() ;
, и компилятор знал бы, что использовать логический вывод для первого типа (который не указан)и использовать тест в качестве второго типа.
Есть ли способ обойти эту проблему?