当前位置: 首页 > 编程语言 > C#

如何让枚举包含破折号(-)?分享

时间:2023-04-11 01:27:39 C#

如何让枚举包含破折号(-)?我正在使用EnterpriseArchitect从此模式生成业务对象。该模式具有以下枚举规范:EnterpriseArchitect生成以下代码,但VisualStudio不喜欢CD-ROM中的破折号(-),因此无法编译。publicenumPackageMedium:int{NTP,DAT,Exabyte,CD-ROM,DLT,D1,DVD,BD,LTO,LTO2,LTO4}我该怎么做才能使这项工作正常进行?基于@CraigStuntz的回答,我找到了这篇帮助我从枚举中检索这些特殊字符的文章。你不能。句号。但是,有一些解决方法。例如,您可以使用DescriptionAttribute:publicenumPackageMedium:int{NTP,DAT,Exabyte,[Description("CD-ROM")]CDROM,DLT,D1,DVD,BD,LTO,LTO2,LTO4}不幸的是,这意味着映射值时您有更多工作要做。另一方面,它至少可以编译。如果您不喜欢它,请选择其他解决方法,例如字典:vardict=Enum.GetValues(typeof(PackageMedium)).Cast().Select(v=>Tuple.Create(v==PackageMedium.CDROM?"CD-ROM":v.ToString(),v)).ToDictionary(t=>t.Item1,t=>t.Item2);varmyEnumVal=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表示枚举的特定项目和CD-ROM表示应用-运算符,CD作为左手操作数,ROM作为右手操作数?如果可能性列表是硬编码的,我将删除连字符减号并将CDROM作为标签。如果它不是硬编码的,我会使用字典,因为它对更多不能作为标识符的情况更有弹性。以上是C#学习教程:Howtomakeenumcontaindashes(-)?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: