【发布时间】:2017-06-19 19:28:56
【问题描述】:
我有一组这样的字符串:
System.Int32
string
bool[]
List<MyType.MyNestedType>
Dictionary<MyType.MyEnum, List<object>>
我想测试这些字符串是否真的是有效类型的源代码表示。
我在一个不支持 Roslyn 的环境中,并且合并任何类型的解析器都很困难。这就是为什么我尝试使用 System.Type.GetType(string) 来解决这个问题。
但是,我走在一条肮脏的道路上,因为有很多边缘情况,我需要修改输入字符串以表示 AssemblyQualifiedString。例如。嵌套类型“MyType.MyNestedType”需要是“MyType+MyNestedType”,而且泛型也必须通过艰难的方式来解决。
是否有任何辅助方法可以在 .Net 2.0 中进行这种检查?我在 Unity 游戏引擎中工作,我们没有任何方法可以将我们的系统切换到具有可用解析器的更复杂的环境。
澄清 我公司在 Unity 中开发了一个代码生成系统,目前还不容易更改。我需要添加的一件事是能够获取在类中定义的字段列表(通过反射),然后根据它们是默认运行时程序集的一部分还是包含在 #if 中来分离它们UNITY_EDITOR 预处理器指令。当这些设置好后,我基本上想以不同的方式处理这些字段,但仅靠反射无法告诉我。因此,我决定打开我的脚本文件,查看此类定义区域的文本,然后检查其中是否声明了一个字段,如果为真,则将其放入单独的 FieldInfo[] 数组中。
固定不变的一件事是:所有脚本都将通过反射进行检查,并且 FieldInfo 的集合用于在其他地方生成新的源代码。我只需要将该集合分成单独的集合,用于运行时与编辑器程序集。
【问题讨论】: