+ -
当前位置:首页 → 问答吧 → 谁来解释下这段代码

谁来解释下这段代码

时间:2011-12-26

来源:互联网

private Dictionary<bool, Action> dic; 
  protected void Page_Load(object sender, EventArgs e)
  {
  string value = Request.Form["hName"] ?? "";

  bool result;

  if (bool.TryParse(value, out result))
  {
  dic = new Dictionary<bool, Action>();

  dic.Add(true, Confirm);
  dic.Add(false, Cancel);

  dic[result]();
  }  
  }

  protected void btnCallBack_Click(object sender, EventArgs e)
  {
  // 先执行一段代码  
  lit.Text = DateTime.Now.ToString("yyyy-MM-dd");


  //弹出confirm  

  ClientScript.RegisterStartupScript(GetType(), "confirm", "CustomSubmit();", true);
  }

  //确认时执行的代码  
  private void Confirm()
  {
  lit.Text = "确认";
  }

  //取消时执行的代码  
  private void Cancel()
  {
  lit.Text = "取消";
  }  
这是非哥博客中对于confirm的改写,Dictionary<bool, Action> dic中ACTION是什么类型,还有我调试的时候if (bool.TryParse(value, out result))中的代码一直没有运行过,这段代码有什么作用

作者: jianghui7897   发布时间: 2011-12-26

没人看的懂非哥的代码吗?

作者: jianghui7897   发布时间: 2011-12-26

ACTION应该是个枚举类型吧,当然这个只是猜的,具体要看他怎么定义的了。
if (bool.TryParse(value, out result))
这个表示的是 是否可以将value转换为bool类型,如果可以那么走if里面,result是返回值,就是value转换成bool类型后的值。

作者: dd__dd   发布时间: 2011-12-26

鄙人认为action是指 Confirm()
  Cancel()
 从dic = new Dictionary<bool, Action>();

  dic.Add(true, Confirm);
  dic.Add(false, Cancel);
看出来的

@非哥

作者: jayinIT   发布时间: 2011-12-26

引用 2 楼 dd__dd 的回复:

ACTION应该是个枚举类型吧,当然这个只是猜的,具体要看他怎么定义的了。
if (bool.TryParse(value, out result))
这个表示的是 是否可以将value转换为bool类型,如果可以那么走if里面,result是返回值,就是value转换成bool类型后的值。
没有,我自己试验过,ACTION就是一个类型,和枚举无关,if (bool.TryParse(value, out result))
  {
  dic = new Dictionary<bool, Action>();

  dic.Add(true, Confirm);
  dic.Add(false, Cancel);

  dic[result]();
  } 中if里面的代码一直没执行过,dic一直为null,但是最后直接执行了dic[result]();, dic = new Dictionary<bool, Action>();
  dic.Add(true, Confirm);
  dic.Add(false, Cancel);一直没执行,但是dic突然就有值了,这里一直很纠结。不知道为什么。

作者: jianghui7897   发布时间: 2011-12-26

引用 3 楼 jayinit 的回复:

鄙人认为action是指 Confirm()
Cancel()
从dic = new Dictionary<bool, Action>();

dic.Add(true, Confirm);
dic.Add(false, Cancel);
看出来的

@非哥
即便是这样理解,但是
dic = new Dictionary<bool, Action>();
  dic.Add(true, Confirm);
  dic.Add(false, Cancel);这段代码一直没运行,最后却直接运行了dic[result]();,跳过了dic = new Dictionary<bool, Action>();
  dic.Add(true, Confirm);
  dic.Add(false, Cancel);这段代码,dic突然出现了值,何解。我把地址发出来吧,希望大家能够帮忙看看http://blog.csdn.net/Sandy945/article/details/5716632

作者: jianghui7897   发布时间: 2011-12-26

ACTION就是System.Action 委托 具体的你可以查看下MSDN,刚才没仔细看

作者: dd__dd   发布时间: 2011-12-26

引用 6 楼 dd__dd 的回复:

ACTION就是System.Action 委托 具体的你可以查看下MSDN,刚才没仔细看
MSDN没找有关于System.Action 委托的描述,百度了一下,也没有太多的资料,基本的ACTION委托能看懂,也能理解,但是在这个例子中的Dictionary中的使用还是没看明白。不过还是谢谢了

作者: jianghui7897   发布时间: 2011-12-26

字典 、 泛型 的应用.

作者: shashengduguzhe   发布时间: 2011-12-26