请问,我可以往hashtable里存对应的key(string)键value(函数)值对么,到时候直接通过取key,回调值方法?
static void Main(string[] args)
{
Hashtable ht=new Hashtable(); //创建一个Hashtable实例
ht.Add("E","e"); //添加keyvalue键值对
ht.Add("A","a");
for(int i=0;i<9;i++)
{
ht.Add(i,(i+100).ToString());
}
string s1=(string)ht["A"]; //取key为A的值
Console.WriteLine(s1);
if(ht.Contains("E")) //file判断哈希表是否包含key为E的键值
Console.WriteLine( "键值 E 存在,对应:"+ ht["E"]);
ht.Remove("E"); //移除一个keyvalue键值对
Console.WriteLine(ht["E"]); //此处将不会有任何输出
for(int i=0;i<3;i++)
Console.WriteLine(ht[i]);
Console.WriteLine("----------输出所有元素--------------------");
foreach (DictionaryEntry de in ht)
{
Console.Write(de.Key);
Console.Write("---");
Console.WriteLine(de.Value);
}
Console.ReadKey();
}
-------------------------------------------------------------------------------------------------------------------------------
如果是这样的话,我可以明确告诉你,存入函数或函数体都是不对的,存入函数名,必须要使用eval类似的动态编译的方法才会使用你的方案成功——动态编译是最拉尽能的,而存入函数体也是不对的,因为hashtable适合存的是小型的数据,不适保保存大量的数据。
其实,可以考虑存入委托,因为key与value均为object类型,只要取出时用(delegate)强制转换一下即可达到你要的效果。比如对某个方案做回调等等。
但是这些其实都是不最佳的方法——为什么不考虑设计模式中的策略模式呢?策略模式是将算法家族进行封装,以实现不同的调用方法,如果有些时间策略模式不太符合时,可以考虑工厂模式与策略模式的结合——所以建议你使用设计模式,而不是使用hashtable进行你所谓的设计。
如果是面向对象编程,不会使用设计模式是一种悲哀。不建议你使用你提问的这种方式。