请问,我可以往hashtable里存对应的key(string)键value(函数)值对么,到时候直接通过取key,回调值方法?

 我来答
帐号已注销
2013-04-03 · TA获得超过2184个赞
知道小有建树答主
回答量:631
采纳率:100%
帮助的人:638万
展开全部

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();

             

        }

-------------------------------------------------------------------------------------------------------------------------------

百度网友66a8d48e5
2013-04-03 · TA获得超过7687个赞
知道大有可为答主
回答量:3002
采纳率:12%
帮助的人:3862万
展开全部
我理解你的意思,你的意思是说,将一个string作为一个提示词,然后将一个函数名存入到hashtable的value中,然后在运行时,根据输入的不同的string来调用不同的算法!

如果是这样的话,我可以明确告诉你,存入函数或函数体都是不对的,存入函数名,必须要使用eval类似的动态编译的方法才会使用你的方案成功——动态编译是最拉尽能的,而存入函数体也是不对的,因为hashtable适合存的是小型的数据,不适保保存大量的数据。

其实,可以考虑存入委托,因为key与value均为object类型,只要取出时用(delegate)强制转换一下即可达到你要的效果。比如对某个方案做回调等等。

但是这些其实都是不最佳的方法——为什么不考虑设计模式中的策略模式呢?策略模式是将算法家族进行封装,以实现不同的调用方法,如果有些时间策略模式不太符合时,可以考虑工厂模式与策略模式的结合——所以建议你使用设计模式,而不是使用hashtable进行你所谓的设计。

如果是面向对象编程,不会使用设计模式是一种悲哀。不建议你使用你提问的这种方式。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式