如何在字符串转Enum映射时触发编译期错误?
问题描述
我已在.editorconfig中启用了严格枚举映射,全局枚举使用EnumMappingStrategy.ByName策略。
问题在于该严格性仅适用于枚举到枚举的转换,而字符串到枚举的转换会生成如下代码,存在运行时错误风险:
[global::System.CodeDom.Compiler.GeneratedCode("Riok.Mapperly", "3.4.0.0")] private global::Blue.Tests.Logic.Baz MapToBaz(string source) { return source switch { nameof(global::Blue.Tests.Logic.Baz.Cux) => global::Blue.Tests.Logic.Baz.Cux, _ => System.Enum.Parse<global::Blue.Tests.Logic.Baz>(source, false), }; }
我尝试通过EnabledConversions= MappingConversionType.All & ~MappingConversionType.StringToEnum禁用内置的字符串转枚举转换器,但生成的代码变为:
[global::System.CodeDom.Compiler.GeneratedCode("Riok.Mapperly", "3.4.0.0")] public partial global::Blue.Tests.Logic.Bar? Map(global::Blue.Tests.Logic.Foo? from) { if (from == null) return default; var target = new global::Blue.Tests.Logic.Bar(); if (from.Status != null) { target.Status = (global::Blue.Tests.Logic.Baz)int.Parse(from.Status); } return target; }
我选择Mapperly的核心原因之一就是避免反射类库带来的运行时错误,但目前生成的代码明显存在疏漏。请问有没有办法在意外触发字符串到枚举的映射时直接触发编译错误?
内容的提问来源于stack exchange,提问作者glazjoon
相关产品推荐
相关产品推荐

