У меня есть объект типа X , который я (очевидно) могу получить во время выполнения.
var type = myObject.GetType();
И у меня есть общий статический класс.
public static class MyStaticClass<T>
{
public static void DoStuff(T something)
{
// bla bla
}
}
Я бы хотел сделать следующее:
MyStaticClass<myObject.GetType()>.DoStuff(myObject);
Но я не могу.
На самом деле, существует только несколько типов, с которыми MyStaticClass будет работать, и они имеют несколько интерфейсов. Один из обходных путей - написать:
if (myObject.GetType() == typeof(X))
{
MyStaticClass<X>.DoStuff(myObject as X);
}
if (myObject.GetType() == typeof(Y))
{
MyStaticClass<Y>.DoStuff(myObject as Y);
}
но это многословно, и писать, что везде действительно некрасиво - я чувствую, что не должен этого делать, но также и то, что у меня не должно быть , чтобы сделать это.
Я не могу поверить, что нет решения. Или любой аккуратный обходной путь по крайней мере? Или мой подход неверен для начала (какова альтернатива, если так)? Должен ли я создать некоторый (абстрактный?) Базовый класс для X, Y, Z?