版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第C#判斷語句的表達(dá)式樹實(shí)現(xiàn)C#提供了以下類型的判斷語句:
語句描述if一個(gè)if語句由一個(gè)布爾表達(dá)式后跟一個(gè)或多個(gè)語句組成。if...else一個(gè)if語句后可跟一個(gè)可選的else語句,else語句在布爾表達(dá)式為假時(shí)執(zhí)行。嵌套if語句您可以在一個(gè)if或elseif語句內(nèi)使用另一個(gè)if或elseif語句。switch語句一個(gè)switch語句允許測(cè)試一個(gè)變量等于多個(gè)值時(shí)的情況。嵌套switch語您可以在一個(gè)switch語句內(nèi)使用另一個(gè)switch語句。
當(dāng)然還有、:等判斷,下面將詳細(xì)實(shí)踐。
If語句,使用IfThen(Expressiontest,ExpressionifTrue);來表達(dá)
Expressiontest表示用于判斷的表達(dá)式,ExpressionifTrue表示結(jié)果為true時(shí)執(zhí)行的表達(dá)式樹。
示例
inta=10;
intb=10;
if(a==b)
Console.WriteLine("a==b為true,語句被執(zhí)行");
Console.ReadKey();
使用表達(dá)式樹實(shí)現(xiàn)如下
ParameterExpressiona=Expression.Variable(typeof(int),"a");
ParameterExpressionb=Expression.Variable(typeof(int),"b");
MethodCallExpressioncall=Expression.Call(
null,
typeof(Console).GetMethod("WriteLine",newType[]{typeof(string)}),
Expression.Constant("a==b為true,表達(dá)式樹被執(zhí)行"));
ConditionalExpression_if=Expression.IfThen(Expression.Equal(a,b),call);
ExpressionActionint,intlambda=Expression.LambdaActionint,int(_if,a,b);
lambda.Compile()(10,10);
Console.ReadKey();
生成的表達(dá)式樹如下
.Lambda#Lambda1System.Action`2[System.Int32,System.Int32](
System.Int32$a,
System.Int32$b){
.If($a==$b){
.CallSystem.Console.WriteLine("a==b為true,表達(dá)式樹被執(zhí)行")
}.Else{
.Default(System.Void)
}
if...else
if...else使用以下表達(dá)式樹表示
ConditionalExpressionIfThenElse(Expressiontest,ExpressionifTrue,ExpressionifFalse);
示例代碼如下
inta=10;
intb=11;
if(a==b)
Console.WriteLine("a==b為true,此語句被執(zhí)行");
else
Console.WriteLine("a==b為false,此語句被執(zhí)行");
Console.ReadKey();
用表達(dá)式樹實(shí)現(xiàn)如下
ParameterExpressiona=Expression.Variable(typeof(int),"a");
ParameterExpressionb=Expression.Variable(typeof(int),"b");
MethodCallExpressioncall1=Expression.Call(
null,
typeof(Console).GetMethod("WriteLine",newType[]{typeof(string)}),
Expression.Constant("a==b為true,此表達(dá)式樹被執(zhí)行"));
MethodCallExpressioncall2=Expression.Call(
null,
typeof(Console).GetMethod("WriteLine",newType[]{typeof(string)}),
Expression.Constant("a==b為false,此表達(dá)式樹被執(zhí)行"));
ConditionalExpression_if=Expression.IfThenElse(Expression.Equal(a,b),call1,call2);
ExpressionActionint,intlambda=Expression.LambdaActionint,int(_if,a,b);
lambda.Compile()(10,11);
Console.ReadKey();
生成的表達(dá)式樹如下
.Lambda#Lambda1System.Action`2[System.Int32,System.Int32](
System.Int32$a,
System.Int32$b){
.If($a==$b){
.CallSystem.Console.WriteLine("a==b為true,此表達(dá)式樹被執(zhí)行")
}.Else{
.CallSystem.Console.WriteLine("a==b為false,此表達(dá)式樹被執(zhí)行")
}
switch
示例代碼如下
inta=2;
switch(a)
case1:Console.WriteLine("a==1");break;
case2:Console.WriteLine("a==2");break;
default:Console.WriteLine("a!=1a=2");
Console.ReadKey();
每個(gè)case使用SwitchCase類型表示,使用Expression.SwitchCase生成SwitchCase類型。
Expression.Switch用來構(gòu)建一個(gè)switch表達(dá)式樹,
Expression.Switch的重載比較多,常用的是這種形式
SwitchExpressionSwitch(ExpressionswitchValue,ExpressiondefaultBody,paramsSwitchCase[]cases);
switchValue表示傳入?yún)?shù);
defaultBody表示default執(zhí)行的表達(dá)式;
cases表示多條case。
上面代碼對(duì)應(yīng)使用表達(dá)式樹編寫如下
ParameterExpressiona=Expression.Parameter(typeof(int),"a");
MethodCallExpression_default=Expression.Call(
null,
typeof(Console).GetMethod("WriteLine",newType[]{typeof(string)}),
Expression.Constant("a!=1a=2"));
SwitchCasecase1=Expression.SwitchCase(
Expression.Call(null,
typeof(Console).GetMethod("WriteLine",newType[]{typeof(string)}),
Expression.Constant("a==1")),
newConstantExpression[]{Expression.Constant(1)}
SwitchCasecase2=Expression.SwitchCase(
Expression.Call(null,
typeof(Console).GetMethod("WriteLine",newType[]{typeof(string)}),
Expression.Constant("a==2")),
newConstantExpression[]{Expression.Constant(2)}
SwitchExpression_switch=Expression.Switch(a,_default,newSwitchCase[]{case1,case2});
ExpressionActionintlambda=Expression.LambdaActionint(_switch,a);
lambda.Compile()(1);
Console.ReadKey();
生成的表達(dá)式樹如下
.Lambda#Lambda1System.Action`1[System.Int32](System.Int32$a){
.Switch($a){
.Case(1):
.CallSystem.Console.WriteLine("a==1")
.Case(2):
.CallSystem.Console.WriteLine("a==2")
.Default:
.CallSystem.Console.WriteLine("a!=1a=2")
}
很奇怪,沒有break,但是表達(dá)式樹是正常的,并且運(yùn)行沒問題;
和:
表示空合并運(yùn)算符,例如ab,如果a不為null,即返回a,否則返回b;
常用定義如下
BinaryExpressionCoalesce(Expression
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 元旦介紹課題
- 2025版口腔科臨床基本技術(shù)操作規(guī)范
- 2026年自動(dòng)烹飪機(jī)項(xiàng)目評(píng)估報(bào)告
- 2026年普惠金融信用評(píng)價(jià)體系項(xiàng)目公司成立分析報(bào)告
- 2026年工業(yè)知識(shí)圖譜平臺(tái)項(xiàng)目評(píng)估報(bào)告
- 2026年瞬變電磁探測(cè)設(shè)備項(xiàng)目公司成立分析報(bào)告
- 遼寧省盤錦市盤山縣甜水農(nóng)場(chǎng)中學(xué)2025-2026學(xué)年八年級(jí)上學(xué)期11月期中語文試題(無答案)
- 2026年新型制冷劑替代項(xiàng)目公司成立分析報(bào)告
- 2026年智能香氛釋放系統(tǒng)項(xiàng)目評(píng)估報(bào)告
- 2026年需求側(cè)響應(yīng)項(xiàng)目可行性研究報(bào)告
- GB/T 17213.4-2015工業(yè)過程控制閥第4部分:檢驗(yàn)和例行試驗(yàn)
- FZ/T 73009-2021山羊絨針織品
- JJF 1069-2012 法定計(jì)量檢定機(jī)構(gòu)考核規(guī)范(培訓(xùn)講稿)
- GB∕T 5900.2-2022 機(jī)床 主軸端部與卡盤連接尺寸 第2部分:凸輪鎖緊型
- 2011-2015廣汽豐田凱美瑞維修手冊(cè)wdl
- DFMEA編制作業(yè)指導(dǎo)書新版
- KTronics籃輸送式洗碗碟機(jī)操作手冊(cè)
- DB35∕T 1844-2019 高速公路邊坡工程監(jiān)測(cè)技術(shù)規(guī)程
- 城市管理綜合執(zhí)法局城管執(zhí)法與執(zhí)法程序PPT模板
- 閥門基礎(chǔ)知識(shí)上
- 第二章注射成型工藝與模具結(jié)構(gòu)
評(píng)論
0/150
提交評(píng)論