我怎样才能枚举包含一个破折号( - )? [英] How can i get enum to contain a dash (-)?

查看:147
本文介绍了我怎样才能枚举包含一个破折号( - )?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我生成从这个模式使用企业架构师。

I'm generating business objects from this schema using Enterprise Architect.

该模式具有以下列举说明:

The schema has the following enumeration specification:

<xs:simpleType name="PackageMedium">
    <xs:restriction base="xs:string">
        <xs:enumeration value="NTP"/>
        <xs:enumeration value="DAT"/>
        <xs:enumeration value="Exabyte"/>
        <xs:enumeration value="CD-ROM"/>
        <xs:enumeration value="DLT"/>
        <xs:enumeration value="D1"/>
        <xs:enumeration value="DVD"/>
        <xs:enumeration value="BD"/>
        <xs:enumeration value="LTO"/>
        <xs:enumeration value="LTO2"/>
        <xs:enumeration value="LTO4"/>
    </xs:restriction>
</xs:simpleType>

企业架构师生成以下code,但Visual Studio的不喜欢破折号( - )。在CD-ROM,并不会编译

Enterprise architect generates the following code but Visual Studio doesn't like the dash(-) in CD-ROM and will not compile.

public enum PackageMedium : int {
    NTP,
    DAT,
    Exabyte,
    CD-ROM,
    DLT,
    D1,
    DVD,
    BD,
    LTO,
    LTO2,
    LTO4
}

我能做些什么,使这项工作?

从枚举检索这些特殊字符。

based on @Craig Stuntz answer i was able to find this article which helped me retrieve these special characters from the Enum.

推荐答案

您不能。句号。但是,也有变通办法。你可以,例如,使用 DescriptionAttribute

You can't. Full stop. However, there are workarounds. You can, e.g., use DescriptionAttribute:

public enum PackageMedium : int {
    NTP,
    DAT,
    Exabyte,
    [Description("CD-ROM")]
    CDROM,
    DLT,
    D1,
    DVD,
    BD,
    LTO,
    LTO2,
    LTO4
}

这意味着,不幸的是,你有更多的工作映射值的时候做的。另一方面,它在免得编译。

This means, unfortunately, that you have more work to do when mapping values. On the other hand, it at lest compiles.

如果你不喜欢的是,选择其他的解决方法,例如,一本字典:

If you don't like that, pick another workaround, e.g., a dictionary:

var dict = Enum.GetValues(typeof(PackageMedium))
               .Cast<PackageMedium>()
               .Select(v => Tuple.Create(v == PackageMedium.CDROM ? "CD-ROM" : v.ToString(), v))
               .ToDictionary(t => t.Item1, t => t.Item2);

var myEnumVal = dict["CD-ROM"];

这篇关于我怎样才能枚举包含一个破折号( - )?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆