谁能解释如何使它起作用?我传入类型名称,并且正确填充了“ 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功能。