Ответ 1
Напишите общий метод и введите тип вывода. Я часто считаю, что это хорошо работает, если вы создаете статический неродственный класс с тем же именем, что и общий:
public static class ReportingComponent
{
public static ReportingComponent<T> CreateInstance<T> (IQueryable<T> query)
{
return new ReportingComponent<T>(query);
}
}
Затем в другом коде вы можете позвонить:
var report = ReportingComponent.CreateInstance(query);
EDIT: Причина, по которой нам нужен не-общий тип, заключается в том, что вывод типа встречается только для общих методов, то есть метода, который вводит новый параметр типа. Мы не можем поместить это в общий тип, поскольку нам все равно придется указывать общий тип, чтобы вызвать метод, который побеждает всю точку:)
У меня есть сообщение в блоге, которое более подробно описано.