使用get类型然后在C#中转换为该类型

时间:2009-08-11 19:57:05

标签: c# reflection casting

我的代码如下:

var t = SomeInstanceOfSomeClass.GetType();
((t)SomeOtherObjectIWantToCast).someMethodInSomeClass(...);

那不行,编译器返回关于(t)所谓的Type或命名空间的错误。 你怎么能这样做?

我确定它实际上非常明显......

4 个答案:

答案 0 :(得分:8)

C#4.0允许使用dynamic类型。

那就是说,除非你正在进行COM互操作或为动态语言编写运行时,否则你几乎肯定不想这样做。 (Jon你还有其他用例吗?)

答案 1 :(得分:3)

我已回答了一个重复的问题here。但是,如果您只需要在C#3.0及更低版本的任意对象的实例上调用方法,则可以使用反射:

obj.GetType().GetMethod("someMethodInSomeClass").Invoke(obj);

答案 2 :(得分:1)

if(t is ThisType) {
    ThisType tt = (ThisType)t;
    /*do something here*/
}else if(t is ThatType) {
    ThatType tt = (ThatType)t;
    /*do something here*/
}

这是你在C#3.5和更低版本中所做的最好的,真的。

答案 3 :(得分:0)

为了按照你在问题中描述的方式进行转换,你必须在编译时声明类型,而不是运行时。这就是你遇到问题的原因。