将CLR类型名称转换为等效的惯用C#别名(例如System.String=>;String,Int32=>;int)
我正在解析一些对象,我想动态生成一些代码。 问题是,当我阅读类型时,我会得到如下信息:将CLR类型名称转换为等效的惯用C#别名(例如System.String=>;String,Int32=>;int),c#,C#,我正在解析一些对象,我想动态生成一些代码。 问题是,当我阅读类型时,我会得到如下信息: System.String System.Int32 Boolean 我知道C#to string,int和bool是完全相同的。但是当我解析我的对象时,我得到了“系统”版本,我想使用字符串动态生成一些代码,我想生成别名描述,我能简单地做到吗?(如果没有字典之类的东西将typeof与字符串关联起来……)我不知道如何做到这一点。但是,没有那么多类型,所以如果是我,我可能只会编写一个映射函数 您可以在此处找到C
System.String
System.Int32
Boolean
我知道C#to string,int和bool是完全相同的。但是当我解析我的对象时,我得到了“系统”版本,我想使用字符串动态生成一些代码,我想生成别名描述,我能简单地做到吗?(如果没有字典之类的东西将typeof与字符串关联起来……)我不知道如何做到这一点。但是,没有那么多类型,所以如果是我,我可能只会编写一个映射函数 您可以在此处找到C#类型名称列表作为起点: 更新:这里是C#的参考,其中包括十进制。不知道为什么上面的链接中缺少了这一点:
字符串和int是System.string和System.Int32的别名 似乎您可以使用此命令从字符串中获取类型: 但无法从类型中获取字符串,因此您必须在其中定义自己的映射:
一旦编译用C编写的代码,它就不再知道它来自C代码,因此如果不完全按照您的建议执行,就无法自动获取C别名-创建一个简单的映射字典 这里列出了内置的C#类型:
此列表不会很快更改,因为我不必担心将此列表硬编码到您的应用程序中。从未注意过它,正在修复它!“解析某些对象”的确切含义是什么?显示一些代码!我编辑了你的标题以避免混淆,因为“类型转换”是完全不同的事情。你不能这样做。你得到的是实际的类型,“int”、“string”等等,不过是别名。@James ooh,那么我想我是想避免这种情况,我将自己创建关联映射:(我可以从“dateTimeTypeRef”和“int32typeRef”中得到一个字符串?我试着字符串()但是我得到了:System.CodeDom.CodeTypeReferenceNo你不能:(奇怪,“decimal”该表中缺少。它包含在其他两个答案链接到的表中。
// Creates a reference to the System.Int32 type.
CodeTypeReference int32typeRef = new CodeTypeReference("System.Int32");