我想要做这样的事情:
void someMethod(TypeA object) { ... }
void someMethod(TypeB object) { ... }
object getObject()
{
if (...) return new TypeA();
else return new TypeB();
}
object obj = getObject();
(obj.GetType()) obj; // won't compile
someMethod(obj);
很明显我在这里感到困惑。我知道通过编写条件语句可以使它起作用。
if (obj.GetType() == typeof(TypeA)) obj = (TypeA)obj;
else if (obj.GetType() == typeof(TypeB)) obj = (TypeB)obj;
--但是在运行时难道没有其他方法吗?
编辑 我同意这似乎不是最佳的设计选择,以下是上述代码的背景。 上面的代码是用于Mongo DB的Repository基类。 我希望它能够处理不同类型的表格。 因此,someMethod()实际上是remove;而TypeA和TypeB分别是ObjectID和 Guid ;底部的代码是一种与类型无关的 remove 方法,它接受字符串作为ID; getObject()是解析ID参数的方法。
T
和与之关联的运行时类型信息:typeof(T)
。它们不是同一件事,也不能相互替换。 - Kirk Woll