编码样式 - 在 C# 代码中包含数据的格式
本文关键字:包含 数据 格式 代码 样式 编码 | 更新日期: 2023-09-27 17:57:00
我有一个使用硬编码值表的程序。 例如
public static readonly IDictionary<SpecBuild, BuildInfo> Builds = new Dictionary<SpecBuild, BuildInfo> {
{ SpecBuild.WarriorArms,
new BuildInfo {
Class = Class.Warrior,
Name = "Arms",
Role = Role.Melee
}
},
{ SpecBuild.WarriorFury,
new BuildInfo {
Class = Class.Warrior,
Name = "Fury",
Role = Role.Melee
}
},
{ SpecBuild.WarriorProtection,
new BuildInfo {
Class = Class.Warrior,
Name = "Protection",
Role = Role.Tank
}
}, ...
这些数据很少更改,所以我可以对其进行硬编码。问题是很难读取这些数据,并且格式化不起作用,因为 Resharper 以不同的方式重新格式化它。
理想情况下,我想要一个带有自定义 VS2010 查看器的特殊格式文件,该文件将此信息显示为表,并在编译过程中为这些表生成 C# 代码,甚至可能将其直接编译为 MSIL (CLR)。
我正在寻找一个交钥匙解决方案,问题还不够严重,无法保证任何额外的开发。
我会(并且有很多次)将这种类型的数据推送到文件中(也许通过resx)。然后通过您选择的反序列化程序加载数据。如果需要轻松编辑,可以通过JavaScriptSerializer或 JSON.NET 进行JSON。如果被告知数据和性能是关键,也许是更硬核的东西(也许是二进制)。XML当然也是一个可行的选择。
如果方案允许,其他选项可能包括嵌入式数据库。
理想情况下,我想要一个带有自定义VS2010查看器的特殊格式文件
这是完全可能的:
- 创建 DSL
- 编写支持 DSL 的 VS2010 扩展
- 编写用于执行生成的工具(MSBuild 任务)
- 编写安装程序以使用该工具更新 VS 安装。
当然,这将是很多学习来理解如何做到这一点。
如果您有很多应用程序,其中许多开发人员使用相同类型的信息,那么这将是有意义的。否则还有其他选择:
- 配置锐化器不重新格式化它(我认为这是可能的)。
- 使用 VS 已经可以编辑的数据格式(文本、XML、JSON ...)。 在构建时添加为资源,并创建一个工具以在应用程序启动时(或按需)创建对象图。
显然,#1(可能)是最简单但脆弱的。 #2 已建立 - 这就是处理资源的方式(XAML 也可以)。
可以使用以下命令创建设计时 T4 文本模板
void SpecBuild(string spec, string @class, string name, string role)
{
Write(string.Format("{{ SpecBuild.{0}, " +
"new BuildInfo {{ " +
"Class = Class.{1}, " +
"Name = @'"{2}'", " +
"Role = Role.{3} " +
"}} " +
"}},",
spec,
@class,
name.Replace("'"", "'"'""),
role));
}
和
// SpecBuild Class Name Role
// -------------------- ---------- ------------- -------
SpecBuild("WarriorArms", "Warrior", "Arms", "Melee");
SpecBuild("WarriorFury", "Warrior", "Fury", "Melee");
SpecBuild("WarriorProtection", "Warrior", "Protection", "Melee");
// -------------------- ---------- ------------- -------
Resharper 允许我按扩展名排除文件,所以我将我的文件命名为 *.data.cs,根据需要格式化数据,Resharper 不会重新格式化它。