#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
声明:其中有部分代码因为省事,摘自互联网!
Asp.net的条件和循环语句示例(If,Swich,While,For,Goto,foreach,Lock可直接运行)
最新推荐文章于 2022-01-23 10:27:44 发布