2009-12-02 63 views
0

这是我的第一篇文章。C中的字符串引用#

我正在从数据库中选择一些字段,这些字段是数字标识值,例如10,20,100,110等。这些数字实际上意味着有意义的东西,如区域。理想情况下,应该有一个查询数据库表与匹配的ID和名称字段,但没有,现在变得很难实现在一个合理的时间表(政治)。

我目前使用cumbesome switch函数来检查id并返回相关文本。

private string GetUnitName(string areaid) 
{ 
    string areaName = string.Empty; 
    switch (areaid.Trim()) 
    { 
     case "10": 
      areaName = "area 1"; 
      break; 
     case "20": 
      areaName = "area 2"; 
      break; 
     case "30": 
      areaName = "area 3"; 
      break; 
    } 
    return areaName ; 
} 

我不能让他们在一个dateabse所以什么是最好的方式来存储这些区域字符串?
我可以将它们分组到一个设置文件中吗?

谢谢您听

+1

欢迎来到stackoverflow :) – 2009-12-02 08:53:15

回答

3

作为一个枚举,如果您需要更改它们(取决于它们更改的频率),您将不得不重新编译?

另外,你可以只有一个XML文档,你可以存储在缓存和XPath它找到文本的ID?

<Areas> 
    <Area id="10">Area 1</Area> 
    <Area id="20">Area 2</Area> 
    <Area id="30">Area 3</Area> 
</Areas> 

XPath: /Areas/Area[@id='<your id here>'] 

设置缓存扶养到期,如果文件被更改,然后当你更新它,你将不必重新启动任何东西。为了提高速度,你可以把它作为一个哈希值读入内存中,这样你就不必一直保持对文档的XPath了。

4

你可以将它们存储为一个枚举:

public enum Areas 
{ 
    [Description("Area 1")] 
    Area1 = 10, 
    [Description("Area 2")] 
    Area2 = 20, 
    [Description("Area 3")] 
    Area3 = 30 
} 

Areas x = Areas.Area1; 
string xName = x.ToString(); 
+0

这个DescriptionAttribute在哪里?我只能在ms.vs.TestTools.UnitTesting中找到它,并且只能在方法上使用。 – 2009-12-02 10:00:53

+0

@Hans - System.ComponentModel.Description。您也可以创建自己的描述属性。 – cjk 2009-12-02 14:13:07

0

你可以使包含ID和文本的对象,你可能会找到更好的方法从那里来重构。

编辑:并将其存储在一个List地方,当然:)

1

你能不能再只是将它们保存在一个XML文件,并动态加载它们的启动/数据刷新。这样您可以创建框架以便稍后更改为数据库表。

0

您可能想要考虑Enumeration Classes为您提供枚举的大多数好处,但仍然允许您按照自己认为合适的方式扩展实现(例如添加自己的持久性和缓存方法,如其他一些其他方法所建议的那样这个问题的答案)。

还有一些其他信息在question I asked about enums

0

在代码存储方面,我会考虑Dictionary和KeyValuePair,它使查找变得简单和快捷。假设你正在讨论可以在内存中处理的数据量。

Best implementation for Key Value Pair Data Structure?

然后,你可以从一个文件装载存储。 XML是一个好方法,但如果它真的只是简单的ID和字符串值,那么一个简单的CSV文本文件就足够了。

如果你正在谈论大量的数据,那么它可能会更好地研究随机访问类型的文件存储,但是这样做的时间可能会更好地花在数据库上。另一方面,如果它只是少数数据项而且这些数据项保证不会改变,那么正如其他人所提到的那样,枚举就没有问题。