我正在尝试设计一类静态对象。例如,假设它们代表汽车模型。这就是我开始的方式:
public class CarModel
{
internal CarModel(string manufacturer, string modelName, double seconds0To60, double maxMPH)
{
Manufacturer = manufacturer;
ModelName = modelName;
Seconds0To60 = seconds0To60;
MaxMPH = maxMPH;
}
public string Manufacturer { get; private set; }
public string ModelName { get; private set; }
public double Seconds0To60 { get; private set; }
public double MaxMPH { get; private set; }
public override string ToString() { return Manufacturer + " " + ModelName; }
static public readonly CarModel AlfaRomeo_Brera = new CarModel("Alfa Romeo", "Brera 1.75 TBi 3d", 7.5, 146.0);
static public readonly CarModel AlfaRomeo_Giulietta = new CarModel("Alfa Romeo", "Giulietta 1.4 TB Lusso 5d", 9.1, 121.0);
static public readonly CarModel Ford_Focus = new CarModel("Ford", "Focus 2.5 RS 3d", 5.2, 163.0);
static public readonly CarModel Ford_Mondeo = new CarModel("Ford", "Mondeo Saloon 2.0 Zetec 4d", 9.7, 130.0);
static public readonly CarModel Honda_Accord = new CarModel("Honda", "Accord Tourer 2.4 i-VTEC EX 5d (Adas)", 7.6, 138.0);
static public readonly CarModel Honda_Civic = new CarModel("Honda", "Civic Hatchback 1.8 i-VTEC Type S 3d Auto", 10.6, 127.0);
}
这种方法对于上述 6 个测试模型似乎效果很好。然而,现在看来我有大约 500 个车型需要输入,并且每个车型都有很多属性。我拥有的汽车数据当前位于 Excel 电子表格中。所以问题是如何最好地将这些数据添加到我的 dll 中?
如果可能的话,我希望将所有汽车模型编译到程序集 dll 中。所以我宁愿不使用数据库。我简要浏览了一些动态枚举帖子 - 也许一些自动代码生成可能有效?或者也许我可以将数据复制并粘贴到资源文件中?或者也许有某种方法可以将 DataSet 或 DataTable 添加到包含此静态数据的项目中?
我认为上面示例类中的静态只读属性需要更改,以获得更复杂的方法来访问模型列表。
请告诉我您的建议, 谢谢。
最佳答案
既然您说您希望将模型编译到程序集中,我会研究 T4。这是教程http://msdn.microsoft.com/en-us/library/dd820614.aspx 。基本方法是:
- 在 csv 中定义模型
- 创建一个 t4 模板,该模板读取 csv,在类顶部写入数据(内部 CarModel 等),迭代数据,为每一行写出“static public your property”
每次构建项目时,t4 模板都会运行,为您生成类。
编辑,这是一个解决问题的示例 .tt 文件:
<#@ template debug="false" language="C#" #>
<#@ output extension=".cs" #>
<#@ import namespace="System" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Text.RegularExpressions" #>
namespace Play.Helpers
{
public class CarModel
{
internal CarModel(string manufacturer, string modelName, double seconds0To60, double maxMPH)
{
Manufacturer = manufacturer;
ModelName = modelName;
Seconds0To60 = seconds0To60;
MaxMPH = maxMPH;
}
public string Manufacturer { get; private set; }
public string ModelName { get; private set; }
public double Seconds0To60 { get; private set; }
public double MaxMPH { get; private set; }
public override string ToString() { return Manufacturer + " " + ModelName; }
<#
String path = "D:\\My Documents\\Visual Studio 2010\\Projects\\Play\\Play\\Content\\testdata.csv";
List<string[]> parsedData = new List<string[]>();
try
{
using (StreamReader readFile = new StreamReader(path))
{
string line;
string[] row;
while ((line = readFile.ReadLine()) != null)
{
row = line.Split(',');
#>
static public readonly CarModel <#=(String)row[0].Replace(" ", "_")#>_<#=Regex.Replace(row[1], @"[\.\(\)-]", "_").Replace(" ", "_")#> = new CarModel("<#=(String)row[0]#>", "<#=row[1]#>", <#=row[2]#>, <#=row[3]#>);
<#
parsedData.Add(row);
}
}
}catch(Exception e)
{
//left as an excercise for the reader
}
#>
}
}
关于c# - 将静态数据添加到 C# 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7098812/