【发布时间】:2011-07-30 14:24:13
【问题描述】:
我有一个 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 创建一些(抽象的?)基类吗?
【问题讨论】:
标签: c# generics reflection static