我正在尝试设计一类静态对象。例如,假设它们代表汽车模型。这就是我开始的方式:
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添加到包含此静态数据的项目中?
我认为上面的示例类中的静态只读属性需要更改,以便更复杂的方法来访问模型列表。
请告诉我你的建议, 感谢。
答案 0 :(得分:2)
既然你说你希望将模型编译到程序集中,我会研究T4。这是一个教程http://msdn.microsoft.com/en-us/library/dd820614.aspx。基本方法是:
每次构建项目时,都会运行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
}
#>
}
}
答案 1 :(得分:1)
将模型放在somesort的文件中,并将文件作为Content添加到项目中。构建时,将文件复制到目标目录。文件格式可以是固定宽度,XML,CSV或任何格式更容易。加载DLL时,加载将成为所有汽车模型的文件。
我会放弃静态变量方法。
您可以使用制造商和型号的枚举,但新的制造商和型号需要更改代码。