Я хотел бы иметь класс, который обрабатывает заполнение списков данных из выпадающего списка, который может принимать любой тип, так как я бы предпочел, чтобы внешний код выглядел так:
listProvider.For<AnEnumType>().And<AClass>.GetLists();
, чем
listProvider.ForEnum<AnEnumType>().ForClass<AClass>.GetLists();
Вот пример кода
public class Foo
{
public void DoSomething<T>
{
if(typeof(T).IsEnum)
{
//Do Something
} else if (typeof(T).IsClass)
{
var bar = new Bar();
//Problem How to call bar as type T must be a reference type?
bar.GetData<T>()
}
}
}
public class Bar
{
public IProvideList<T> GetData() where T : class
{
//Do Something
}
}
public interface IProvideList<T> T : class
{
}
Во время компиляции компилятор не знает, что T является классом, но я знаю, что это будет во время выполнения.Я могу вызвать это с помощью отражения:
bar.GetType().GetMethod("GetData").MakeGenericMethod(typeof(T));
, однако я не могу привести результат обратно к (IProvideList) при вызове метода, потому что T должен быть referenceType
Есть ли способобойти это?