我有一个有点大小的Hashtable,只填充了查找静态数据。
这意味着当程序启动时,我要么有一个很长的初始化器/构造函数方法,它将执行许多hashtable.Add()方法(yuk)或从我自定义生成的资源文件中反序列化编码时间。
在编译时是否有可用于包含此数据的属性或其他方式?
答案 0 :(得分:3)
如果您的数据是严格静态的(或者足够静态,您可以在程序中对其进行硬编码),那么您可以将所有值放在switch语句中。真的不能说这是不是一个好主意,但它似乎没有比加载HashTable更糟糕。从好的方面来说,“哈希表”初始化确实成为严格的编译时操作:
public int Lookup(int key)
{
switch (key)
{
case K1: return V1;
case K2: return V2;
case K3: return V3;
case K4: return V4;
case K5: return V5;
case K6: return V6;
case K7: return V7;
default: return V_WHOOPS;
}
}
如果值的数量很大,您可以编写脚本来生成代码,而不是手动输入。
答案 1 :(得分:2)
取决于您在表格中的内容。您始终可以使用资源文件。
答案 2 :(得分:1)
Theres无法在编译时从概念上设置对象。该对象必须由.NET运行时分配/构造,然后以某种方式填充数据。
至于如何加快速度,你可以尝试将Hashtable序列化为二进制文件,然后对其进行所有缓慢的Add调用。
然后在您的主应用程序中,您可以在需要时将其序列化。
与许多.Add调用相比,这有望为您提供更快的HashTable初始化。
答案 3 :(得分:0)
如果您不想在运行时加载Hashtable,则可以处理此问题的方法是将数据存储在数据库中,然后使用查询或LINQ执行查找。如果您只想要面向桌面的东西,那么有几个选项, SQLLite ,SqlServerCE。您还可以使用更强大的功能,如SqlServer或MySql,具体取决于您的应用程序的范围。
答案 4 :(得分:0)
如果您想在运行时使用HashTable实例,则必须在运行时分配并填充该HashTable实例。
如果您想使用值做出决定,可以编写方法。