谁能解释如何让它工作?我传入了类型名称,并且“t”被正确填充。我只是不知道如何将 objectToCast 转换为类型“t”。任何帮助表示赞赏。
....
Type t = Type.GetType("castToTypeNameHere");
o = CastTo<t>(objectToCast);
....
private T CastTo<T>(Object obj)
{
return (T)obj;
}
仅供引用,这是我找到的答案:
Type t = Type.GetType(element.Attribute("castToType").Value);
MethodInfo castMethod = this.GetType().GetMethod("CastTo", BindingFlags.Instance | BindingFlags.NonPublic).MakeGenericMethod(t);
object castedObject = castMethod.Invoke(this, new object[] { objectToCast });
当你使用泛型(没有反射)时,类型参数必须是类型的名称,而不是 System.Type
的实例。 .所以你不能说
Type t = Type.GetType("castToTypeNameHere");
o = CastTo<t>(objectToCast);
因为
t
不是类型的名称。好像你说过
o = CastTo<typeof(int)>(objectToCast);
代替
o = CastTo<int>(objectToCast);
前者是非法的,后者是合法的。
我不明白你想要达到什么目的。如果您在编译时不知道类型,那么这样的强制转换是没有用的。编译器不知道
o
的类型,并且您不会获得任何编译时类型安全或 IntelliSense 功能。
我是一名优秀的程序员,十分优秀!