如何让enum包含短划线( – )?
我正在使用Enterprise Architect从此模式生成业务对象。
该架构具有以下枚举规范:
企业架构师生成以下代码,但Visual Studio不喜欢CD-ROM中的破折号( – ),也不会编译。
public enum PackageMedium : int { NTP, DAT, Exabyte, CD-ROM, DLT, D1, DVD, BD, LTO, LTO2, LTO4 }
我能做些什么来完成这项工作?
基于@Craig Stuntz回答我能找到这篇文章 ,帮助我从Enum中检索这些特殊字符。
你不能。 完全停止。 但是,有一些解决方法。 例如,您可以使用DescriptionAttribute
:
public enum PackageMedium : int { NTP, DAT, Exabyte, [Description("CD-ROM")] CDROM, DLT, D1, DVD, BD, LTO, LTO2, LTO4 }
遗憾的是,这意味着在映射值时您还有更多工作要做。 另一方面,它至少可以编译。
如果您不喜欢,请选择另一种解决方法,例如字典:
var dict = Enum.GetValues(typeof(PackageMedium)) .Cast() .Select(v => Tuple.Create(v == PackageMedium.CDROM ? "CD-ROM" : v.ToString(), v)) .ToDictionary(t => t.Item1, t => t.Item2); var myEnumVal = dict["CD-ROM"];
简答:没有。
原因在于-
字符被词法分子用作其他目的的标记,例如表示二元和一元减运算符。
最好的办法是删除-
或者用标识符名称中有效字符的其他字符替换它。 您通常可以使用的唯一非字母字符是_
。
您可以在C#规范中找到更多信息。
AC#标识符必须以下划线开头,Unicode类Lu,Ll,Lt,Lm,Lo或Nl中的字符,或其中一个字符的转义符。 所有其他字符必须来自Unicode类Lu,Ll,Lt,Lm,Lo,Nl,Mn,Mc,Nd,Pc或Cf,或者其中之一的转义。
连字符是Pd类。
如果C#允许它,如果你需要符合CLS,你仍然无法在公共标识符上使用它,因为它也不适合它的规则。
这也是如此,你是如何区分CD-ROM
意味着enum
的特定项目与CD-ROM
意味着将-
运算符与CD
作为左手操作数并将ROM
作为右手操作数应用?
如果可能性列表是硬编码的,我只需删除连字符减号并将CDROM
作为标签。 如果它不是硬编码我会使用字典,因为它更具弹性,面对更多不能作为标识符的情况。
上述就是C#学习教程:如何让enum包含短划线( – )?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。
如若转载,请注明出处:https://www.ctvol.com/cdevelopment/1044354.html