【问题标题】:White space in Type name类型名称中的空格
【发布时间】:2018-08-17 14:37:53
【问题描述】:

我一直在使用 TypeBuilder 类在运行时创建动态类型,我刚刚注意到它允许类型名称中包含空格/空格。所以它产生了一个名为“Test Class”的类型,没有任何明显的问题。

它适用于用户可以输入自己的类型名称的应用程序,所以现在我想知道允许他们输入空格作为类型名称的一部分是否会导致问题,或者是否应该没问题。

【问题讨论】:

  • 您不能在带有 C# 的名称中使用 sapces。 C# 编译器阻止你这样做,但在 CIL (IL, MSIL...) 中没关系。但是,如果您想阻止用户使用相似的名称,您只需测试他们的名称以确保它们符合 C# 规则(例如,通过正则表达式)。

标签: c#


【解决方案1】:

.NET 允许名称中包含任何 unicode 字符。请参阅 ILAsm 规范:

II.5.3 标识符

标识符用于命名实体。简单的 标识符等同于 ID。但是,ILAsm 语法允许 使用可以使用 Unicode 形成的任何标识符 字符集(见分区 I)。为此,标识符应 放在单引号内。这总结在 遵循语法。 [...]

更多详情请见Specification

在其他 .NET 语言中使用名称时会出现问题。 C# 是 ILAsm 的子集 - C# 中的任何内容都可以用 ILAsm 表示。对面不适用。 ILAsm 的某些功能无法翻译成 C#,即引用名称

C# specification 中描述了 C# 名称。为了简化规范中的定义:标识符应以字母或下划线开头,后跟许多字母、数字或下划线。

结论:为了保持 .NET 的可移植性,请仅使用 C# 中允许的名称。

【讨论】:

    【解决方案2】:

    即使它不会引起任何技术问题,它也会破坏命名约定并引入不一致(实际上是什么问题)。为了代码的可读性和将来的维护,我不会使用它们。如果您需要区分这些类型和常规类型,请为在运行时创建的类型提供描述性后缀。

    【讨论】:

    猜你喜欢
    • 2014-07-25
    • 1970-01-01
    • 2012-05-15
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多