c# - 如何在 C# 中强制转换为类型

标签 c# .net

谁能解释如何让它工作?我传入了类型名称,并且“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 功能。

关于c# - 如何在 C# 中强制转换为类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4959320/

相关文章:

.net - OSX 中Mono web 开发的经验

c# - 我想删除警告 : "Replace this with a lock against an object with strong-identity"

c# - 即使 DebugType=full,也无法在 Release模式下调试应用程序

c# - 检查响应字符串是 JSON 对象还是 XML?

c# - 计算 YYYY-MM-DDTHH :MM:SSZ format 中两个日期/时间之间的秒数

c# - 如何在公共(public)结构中预先设置值?

c# - 当线程已经终止(.NET 5/Core)时,Thread.Join 方法并不总是返回相同的值

c# - 将键盘键发送到在同一项目上启动的另一个应用程序

.net - 如何使用断点调试Windows服务?

c# - 在 Visual Studio 中为 C# 项目管理多个配置文件