C#@在从XSD生成的枚举类中

C#@在从XSD生成的枚举类中,c#,enums,xsd,C#,Enums,Xsd,使用xsd.exe,我得到了一个枚举,其中一个元素前面有一个@符号。我不知道为什么,我也不知道这是为了什么,或者这意味着什么。在谷歌上搜索一个符号的效率并不高 原始XSD片段: <xs:simpleType name="stopLocation"> <xs:restriction base="xs:string"> <xs:enumeration value="default"/> <xs:enumeration va

使用xsd.exe,我得到了一个枚举,其中一个元素前面有一个@符号。我不知道为什么,我也不知道这是为了什么,或者这意味着什么。在谷歌上搜索一个符号的效率并不高

原始XSD片段:

  <xs:simpleType name="stopLocation">
    <xs:restriction base="xs:string">
      <xs:enumeration value="default"/>
      <xs:enumeration value="near"/>
      <xs:enumeration value="far"/>
      <xs:enumeration value="nearExact"/>
      <xs:enumeration value="farExact"/>
    </xs:restriction>
  </xs:simpleType>
public enum stopLocation {
    @default,
    near,
    far,
    nearExact,
    farExact,
}
(是的,最后一个元素有一个逗号,VS似乎很喜欢)


谢谢。

它将从C#中转义
默认值
关键字


请参阅此问题:

发生这种情况是因为枚举值名称(默认值)是保留字。在C#中,保留字必须附加
@
,以便编译器知道如何解释它们

您将看到类似“事件”或“公共”名称的相同行为。

“@”语法允许您使用保留语言字作为变量/成员名称。在大多数情况下,我认为这是一个很差的练习。

是一个C关键字。


@
符号用作转义语言关键字的一种方式,以便它们可以用作变量名和其他标识符。

可能是因为default是C#关键字。
default
是保留关键字;保留关键字前面的
@
允许您将其用作合法标识符(在我看来,使用它是一种气味(尤其是恶心的
@this
)。根据规范,看似无关的
是合法的。它使代码维护和代码生成变得更容易一些。啊,我的重点是@是枚举的一部分,而不是作为一种语言特性-现在有意义了!我从来没有必要使用它,因此直到现在才知道它。我将看看是否可以更改继承的XSD。谢谢大家。