C# 如何使用';硬编码';字典/枚举
我想创建一个字符串的“字典”,但是我只学会了如何使用字符串引用字典中我想要的内容。我想要一些更自动更正的东西(因为输入错误可能发生在一个大的字符串表中),这就是我想知道如何硬编码的原因。(字符串的值将从文本文件中检索,如JSON) 我注意到微软在他们的字符串资源文件中使用了某种类型的硬编码 因此,不要这样做:C# 如何使用';硬编码';字典/枚举,c#,.net,localization,hardcode,C#,.net,Localization,Hardcode,我想创建一个字符串的“字典”,但是我只学会了如何使用字符串引用字典中我想要的内容。我想要一些更自动更正的东西(因为输入错误可能发生在一个大的字符串表中),这就是我想知道如何硬编码的原因。(字符串的值将从文本文件中检索,如JSON) 我注意到微软在他们的字符串资源文件中使用了某种类型的硬编码 因此,不要这样做: string result = strings["Hello"]; 我希望这样做: string result = strings.Hello; 我唯一能想到的就是使用一些外部工具,用
string result = strings["Hello"];
我希望这样做:
string result = strings.Hello;
我唯一能想到的就是使用一些外部工具,用文本文件中的值创建一个enum/struct脚本。有没有更好的选择,也许是内置在.NET中的
编辑:我认为“强类型”比“硬编码”更适合描述
编辑2:感谢所有的评论和答案。从外观上看,需要一些代码生成器来验证这个结果。我想知道是否已经有任何工具可以为您做到这一点(我试图寻找,但我的术语可能缺乏)。创建这个工具似乎不太困难。我不明白您想要什么,但我只是想在这里提出一个想法-如何扩展类字符串并向其中添加您自己的方法?所以当你使用字符串时,它会返回你想要的吗 例如:
有compiletime常量和runtime常量 您希望获得自动更正/智能感知支持,需要编译时常量。这些是唯一的智能,语法突出和编译器双重检查为您 但是您要求从第三方文本文件生成值,这表示运行时常量或某种自动代码生成。运行时常量将取消编辑器支持。而代码生成会遇到问题,因为编辑器只有文件的旧副本。如果一个文件中的字符串发生更改,则很有可能会破坏成吨的代码 因此,您的两个需求本质上是不一致的。你需要有你的蛋糕,也要吃它 也许我对Enum/ToString()问题的原始解决方案可以帮助您? 枚举用于常量的大多数部分组,默认情况下为整数组。添加了对分配的类型检查。这使他们成为一个很好的方法。引用组中的值就像引用任何常量、只读静态字段或只读属性一样。(还有其他优势,比如旗帜,但我怀疑它们在这里是否重要) 虽然枚举有一个字符串可以用于显示和输入解析(在源代码中使用),但该字符串绝对不适合显示。默认情况下,它们都是CAP,您需要支持本地化。我的原始解决方案是一个翻译层。我在StringRepresentation中添加了一个
字典。可以在运行时生成甚至更改此词典:
- 我需要显示任何特定的值,它是
someEnumLocalization[someEnum]
。我可以在枚举的编译器表示形式ToString()中添加默认行为
- 我需要解析用户输入?在找到匹配项之前,对这些值进行初始化,如果没有,则抛出ParseException
- 我开始使用编译时检查。无需在其他任何地方处理非常不可变的编译端字符串。或者我的代码端字符串一直在变化
您可以使用T4模板吗?我在过去做过这件事,如果你记得适当地重新生成它们,那么它就足够好了。如果你想要完整的智能感知,你就必须编写一些静态类,正如@canton7所建议的那样。如果您愿意放弃intellisense,您可以尝试。有一个通用的只读集合:|它没有编译时常量/枚举的性能优势,但至少使用代码无法更改它。您看过资源文件背后的代码吗?每个键都有一个属性。@RubensFarias:我假设OP不想动态编译和加载这些东西,因为他编写了string result=strings.Hello代码>否则,我认为这或多或少不能回答OP的问题,即如何为某个类生成一组属性(请参见它们的字符串变量)