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

10-06 04:38