我的代码如下:
var t = SomeInstanceOfSomeClass.GetType();
((t)SomeOtherObjectIWantToCast).someMethodInSomeClass(...);
那不行,编译器返回关于(t)所谓的Type或命名空间的错误。 你怎么能这样做?
我确定它实际上非常明显......
答案 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)
为了按照你在问题中描述的方式进行转换,你必须在编译时声明类型,而不是运行时。这就是你遇到问题的原因。