任何人都可以解释如何让这个工作?我传入了类型名称,正确填充了"t".我只是无法弄清楚如何将objectToCast转换为输入"t".任何帮助表示赞赏.
....
Type t = Type.GetType("castToTypeNameHere");
o = CastTo<t>(objectToCast);
....
private T CastTo<T>(Object obj)
{
return (T)obj;
}
Run Code Online (Sandbox Code Playgroud)
仅供参考,这是我找到的答案:
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 });
Run Code Online (Sandbox Code Playgroud)
当您使用泛型(没有反射)时,类型参数必须是类型的名称,而不是实例System.Type.所以你不能说
Type t = Type.GetType("castToTypeNameHere");
o = CastTo<t>(objectToCast);
Run Code Online (Sandbox Code Playgroud)
因为t不是类型的名称.就像你说的那样
o = CastTo<typeof(int)>(objectToCast);
Run Code Online (Sandbox Code Playgroud)
代替
o = CastTo<int>(objectToCast);
Run Code Online (Sandbox Code Playgroud)
前者是非法的,后者是合法的.
我不明白你想要实现的目标.如果你在编译时不知道类型,那么这样的演员是没用的.编译器不会知道类型o,并且您将不会获得任何编译时类型安全性或IntelliSense功能.