【发布时间】:2021-05-26 18:56:51
【问题描述】:
我知道我可以像这样从字符串名称中获取类型
Type intType = Type.GetType("System.Int32");
但是,如果我有这样的字符串怎么办
string[] typeNameArr = new string[] {"Int", "String", "DateTime", "Bool"};
如何将这些转换为实际类型?也许我可以从别名中获取完整的限定名,然后执行GetType?
【问题讨论】:
-
你的字符串数组是奇数。
Int需要变为int或System.Int32,而DateTime需要变为System.DateTime(没有 DateTime 语言别名)。我认为您将不得不对其中的一些进行特殊处理——查找知道Int等的内容,然后尝试将System.附加到那些不在您查找中的内容 -
听起来您基本上想要一个
Dictionary<string, Type>- 将您从网络服务中知道的每种类型添加到该字典中。 -
此外,基于反序列化数据实例化任意类型是一个巨大的安全漏洞。 BCL 中隐藏了一些类型,当它们被实例化时,它们会做任意事情,攻击者可以使用它来执行远程代码执行。您必须将任何类型的对象创建列入已知安全类型的白名单
-
没有。别名是 C# 语言的概念,但
Type.GetType由运行时提供,用于所有 CLR 语言 -
你的字体真的有那么多变化吗?只写字典比摆弄反射要快。
标签: c#