这是我的第一篇文章。
我从数据库中选择一些数字id值的字段,例如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 ;
}
我无法将它们置于日期中,那么存储这些区域字符串的最佳方法是什么? 我可以将它们分组到设置文件中吗?
感谢您的聆听
答案 0 :(得分: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();
答案 1 :(得分:3)
作为一个枚举,你需要重新编译,如果你需要改变它们(取决于它们改变的频率)?
或者你可以只有一个XML文档,你可以藏在Cache和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>']
如果文件已更改,则将Cache Dependancy设置为过期,然后在更新文件时,您不必重新启动任何内容。为了提高速度,您可以将其作为哈希值读入内存中,这样您就不必始终对文档进行XPathing了。
答案 2 :(得分:1)
您是否可以不将它们存储在XML文件中,并在启动/数据刷新时动态加载它们。这样,您就可以创建框架以便以后更改为数据库表。
答案 3 :(得分:0)
你可以制作一个包含Id和Text的对象,你可能会找到更好的重构方法。
编辑:并将它们存储在某个地方的列表中,当然:)
答案 4 :(得分:0)
您可能需要考虑Enumeration Classes为您提供枚举的大部分好处,但仍然允许您根据需要扩展实现(例如添加自己的持久性和缓存方法,如某些建议该问题的其他答案)。
question I asked about enums中有更多信息。
答案 5 :(得分:0)
在代码存储方面,我会考虑使用Dictionary和KeyValuePair,这使得查找变得简单快捷。假设您正在谈论可以在内存中处理的大量数据。
请参阅Best implementation for Key Value Pair Data Structure?
然后您可以从文件加载商店。 XML是一种好方法,虽然如果它只是普通的ID和字符串值,那么一个简单的CSV文本文件就足够了。
如果您正在谈论大量数据,那么可能更好地研究随机访问类型的文件存储,但是这样做的时间可能会更好地用于数据库。
另一方面,如果它只是少数数据项并且保证不会改变,那么正如其他人所提到的那样,枚举就可以了。