我一直在使用TypeBuilder类在运行时创建动态类型,而且我刚刚注意到它允许其中包含空格/空格的类型名称。因此,它产生了一个名为“ Test Class”的类型,而没有任何明显的问题。
它用于用户可以输入自己的类型名称的应用程序,因此现在我想知道是否允许他们将输入的空间作为类型名称的一部分会带来麻烦,还是应该没问题。
答案 0 :(得分:3)
.NET允许名称中包含任何unicode字符。请参阅ILAsm规范:
II.5.3标识符
标识符用于命名实体。简单 标识符等同于ID。但是,ILAsm语法允许 使用可以使用Unicode形成的任何标识符 字符集(请参阅分区I)。为此,标识符应 放在单引号内。这总结在 遵循语法。 [...]
Specification中的更多详细信息。
在其他.NET语言中应使用名称时会出现问题。 C#是ILAsm的子集-C#中的任何内容都可以用ILAsm表示。相反不适用。 ILAsm的某些功能无法转换为C#,即引用的名称。
C#名称在C# specification中进行了描述。为了简化规范中的定义:标识符应以字母或下划线开头,后跟许多字母,数字或下划线。
结论:为了保持.NET的可移植性,请仅使用C#中允许的名称。
答案 1 :(得分:0)
即使不会引起任何技术问题,它也会破坏命名约定并引入不一致(实际上是什么问题)。为了代码的可读性和将来的维护,我不会使用它们。如果需要区分这些类型和常规类型,请为运行时创建的类型提供描述性后缀。