Ich möchte eine Klasse, die Population von Listen von Daten aus einem Dropdown, die jeden Typ nehmen kann, wie ich lieber den externen Code aussehen haben würde behandelt:
listProvider.For<AnEnumType>().And<AClass>.GetLists();
als
listProvider.ForEnum<AnEnumType>().ForClass<AClass>.GetLists();
Hier ist der Beispielcode
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
{
}
Zur Kompilierzeit weiß der Compiler nicht, dass T eine Klasse ist, aber ich weiß, dass er es zur Laufzeit weiß. Ich kann dies mit Reflection aufrufen:
bar.GetType().GetMethod("GetData").MakeGenericMethod(typeof(T));
Allerdings kann ich das Ergebnis beim Aufrufen der Methode nicht auf (IProvideList) zurückführen, da T ein Referenztyp sein muss.
Gibt es eine Möglichkeit, dies zu umgehen?