Asp.net的条件和循环语句示例(If,Swich,While,For,Goto,foreach,Lock可直接运行)

来源:互联网 发布:linux自适应屏幕 编辑:程序博客网 时间:2024/04/27 11:54
        #region =========================================================== \\ ★ 【判断语句】            Response.Write(" <br>----------【判断语句】 ------------- <br>");            // 条件运算符:  ?  :            int isyesno=1;            String yesno=isyesno==1?"是":"不是";            Response.Write(yesno);                          #endregion        #region =========================================================== \\ ★ 【If 条件语句】            Response.Write("<br>----------【If 条件语句】 ------------- <br>");           //  if ()           //  {}           //  Else           //  {}            int i=3;            if (i == 1)            {                Response.Write("I=1");            }            else if (i == 2)            {                Response.Write("I=2");            }            else            {                Response.Write("I=3");            }                          #endregion        #region =========================================================== \\ ★ 【switch 条件语句】                Response.Write("<br>----------【switch 条件语句】 ------------- <br>");                // switch语句表达式的值必须为下列类型中的一种:sbyte、byte、short、ushort、int、uint、long、ulong、char、string                // 量表达式后面是一个冒号,冒号后是语句列表。break则结束语句块。Default其他                int ii = 1;                switch (ii)                {                    case 1:                        Response.Write("ii=1");                        break;                    case 2:                        Response.Write("ii=2");                        break;                    default:                        Response.Write("ii=3");                        break;                }      #endregion       #region =========================================================== \\ ★ 【while 循环语句 +1】                Response.Write("<br>----------【while 循环语句】 ------------- <br>");                // break 语句退出   continue 返回循环,相当于Loop , return 语句结束当前函数,返回上一级                int v = 0;                int s=0;                while (v<100)                {                    v=v+1;                    if (v == 5 || v == 45)                    {                        continue;                    }                    s = s+ v;                    if (v==101)                    {                         break;                    }                }                Response.Write("1+.."+v.ToString()+"="+s.ToString());      #endregion          #region =========================================================== \\ ★ 【For 循环语句】                Response.Write("<br>----------【For 循环语句】 ------------- <br>");                //请注意,初始化、条件和循环都是可选的。如果忽略了条件,你就可以产生一个死循环,要用到跳转语句(break 或goto)才能退出。                 int bb = 0;                int b = 0;                for (b = 0; b <= 100; b++)                 {                    if (b > 100)                    {                        break; // 由于某些原因                     }                    bb = bb + b;                }                Response.Write("1+.." + b.ToString() + "=" + bb.ToString());       #endregion         #region =========================================================== \\ ★ 【foreach 循环语句】             Response.Write("<br>----------【foreach 循环语句】 ------------- <br>");             string[] m_name = new string[5] { "王", "安", "李", "和", "马" };             foreach (string u in m_name)             {                 Response.Write(u+"<Br>");             }                        //                Response.Write("1+.." + v.ToString() + "=" + s.ToString());                #endregion         #region =========================================================== \\ ★ 【Try 语句】             Response.Write("<br>----------【Try 语句】 ------------- <br>");             string f = "ok";             int ff = 0;             string c;             int abc;             try             {                 abc = int.Parse(Request.Form["abc"]);                  c = f + ff + 5;                 Response.Write(c);             }             catch              {                 Response.Write("类型Error");             }            //                Response.Write("1+.." + v.ToString() + "=" + s.ToString());         #endregion         #region =========================================================== \\ ★ 【lock 语句】             Response.Write("<br>----------【lock 语句】 ------------- <br>");/*            static void Main() {                  A a = ...;                  lock(a) {                      a.P = a.P + 1;                  }              }              using statements               static void Main() {                  using (Resource r = new Resource()) {                      r.F();                  }              }                             Response.Write("1+.." + v.ToString() + "=" + s.ToString());            asp.net为每一个http请求从HttpApplication池中取出一个HttpApplication来全程处理每个http请求,从Httpmodule管道到http handle处理.虽然asp.net是以多线程的方式处理请求,但因为每一个请求所对应的httpcontext都不相同,所以是为每一个页面请求实例化了一个该页面类的对象来处理http请求的.如果在asp.net页面中使用lock(this),或者lock(非静态实例成员),每个http请求间不会对lock间的代码进行同步访问,也就是说lock失效.根据上面的分析我们可以知道,既然asp.net 为每一个页面请求实例化一个对象,那么这些lock(this),或者lock(非静态实例成员)中的this,非静态实例成员都是不相同的,所以就无法实现锁的功能.                 实验:               protected void Button1_Click(object sender, EventArgs e)                  {                      lock (this)                      {                          for (int i = 0; i < 10; i++)                          {                              Thread.Sleep(1000);                              Response.Write(DateTime.Now.ToString());                          }                      }                  }              同时打开多个页面,尽量同时点击button1,发现页面2的打印时间并不是在页面1的打印时间后,也就是说并不是页面1打印完后页面2才开始,也就是lock失效.              如果修改下,就可以实现不同用户http请求的同步访问了:              private static object o=new object()              protected void Button1_Click(object sender, EventArgs e)                  {                      lock (o)                      {                          for (int i = 0; i < 10; i++)                          {                              Thread.Sleep(1000);                              Response.Write(DateTime.Now.ToString());                          }                      }                  }              因为o是static的,那么在asp.net内也是共享的,生命期跟应用程序一样.              线程的sleep是不释放锁的,而wait是释放锁的.              一般说的多线程是一个请求中(如一个asp.net页面)有多个线程去处理该请求,而不是指asp.net机制是多线程运作的.lock是多线程处理技术中的其中一种.                         */         #endregion         #region =========================================================== \\ ★ 【Goto 语句】             Response.Write("<br>----------【Goto 语句】 ------------- <br>");                // 标记语句和 goto 语句              string args="";                if (args.Length == 0)                 {                    goto done;                }                    Response.Write(args);                done:                    Response.Write("这是空的!");                    int si = 0;                    while (si < 6)                    {                        Response.Write("<Br>当前si值为" + si.ToString().Trim() + "<br>");                        if (si == 3)                            goto Complete; //假如i等于5,就跳到Complete标记处直接结束while语句;                        si++;                    }                    Response.Write("<br>全部循环完!");                Complete:                    Response.Write("<br>程序直接跳到这里结束!");         #endregion
声明:其中有部分代码因为省事,摘自互联网!