在C#中,Hashtabl和Datatable是程序员经常用到的两个类,Hashtable主要用来进行字典操作,Datatable经常用来存储从数据库表中(广义来说可以是各种数据源)得到的数据,它是程序和数据库之间的一个桥梁,从库里提取到的数据放到Datatable中,程序对Datatable中的这些数据进行操作,然后再将修改后的数据存到数据库中。
值得注意的一点是Datatable是大小写不敏感的,而Hashtable是大小写敏感的。Datatable的“不敏感”特性非常有好处,使得在编程过程中,数据维护的工作量大大减少;而Hashtable的“敏感”特性并不总是有利的,比如有这样格式的一个XML模板文件:
<segment>
<Xmltag><string name="xxx"></string></Xmltag>
<Xmltag><string name="yyy"></string></Xmltag>
<Xmltag><string name="zzz"></string></Xmltag>
</segment>
需要以上面的文件为模板,构造出如下的一个XML文件发送出去:
<body>
<xxx>....</xxx>
<yyy>.....</yyy>
<zzz>.....</zzz>
</body>
完成上面的功能,首先需要根据模板文件中name的值,分别在Hashtable中存储对应的value值,如table.add("xxx","test")、table.add("yyy","hello");然后根据模板文件构造发送文件,发送文件配置节中的内容需要从Hashtable中获取,如table["xxx"]、table["yyy"]。
在一个大型项目中,如果设计时没有考虑周全或沟通不及时,不同的人可能写出不同风格的模板文件,xxx可能是全小写,也可能是全大写,或者是大小写混合,而负责写“hashtable.add()”的程序员和编写XML文件的人恰好又不一样,他选择了全部小写的风格,那么因为Hashtable的“敏感”特性,就会出现令人头疼的情况,要么修改程序,要么修改XML文件,修改程序是上策,有两种选择,一种方法是一个一个的修改,将add()中的所有xxx,yyy........修改为和xml文件中相同的风格,这会令人生厌,另一种方法是,重写Hashtable中的方法,使其大小写不敏感,代码如下:
class HashTableTest:Hashtable
{
public override object this[object key]
{
get
{
if(key==null)
{
return base[key];
}
else
{
}
return base[key.ToString().ToLower()];
}
}
public override void Add(object key, object value)
{
base.Add(key.ToString().ToLower(),value);
}
}