C 之Lambda不得不說的用法

2022-01-22 18:48:30 字數 3229 閱讀 6099

由於我才開始接觸**的時候遇到迴圈問題都是用foreach和for,慢慢就成了習慣,不願意用其他簡便的方式,偶然發現lambda能代替迴圈而且簡便了很多。當然我用lambda也不是簡便,更多是不用不行了,看公司專案很多地方這種用法導致我沒有看懂原始碼,所以索性把關於lambda的知識學習並進行總結。

1:什麼是lambda表示式

lambda 表示式是一種可用於建立委託或表示式目錄樹的匿名函式(摘自msdn)這句話是什麼意思下面慢慢開始說起

2:我用一張圖來表示lambda的組成

就是形如(引數)=>

3:委託和lambda的用法

首先定義三個委託:

private delegate string dellambda();//沒有引數

private delegate void dellambdaone(string param);//乙個引數

private delegate int dellambdatwo(int param1, int param2);//兩個引數表達多個

a:沒有任何引數

public

static

void

noparam()

;console.writeline(

"我沒有引數 返回值:

",dellambda());

}

執行結果:

b:只有乙個引數的

public

static

void

oneparam()

;dellambdaone(

"哈哈我只有乙個引數");

}

執行結果:

c:2個以上引數

public

static

void

twoparam()

;console.writeline("*=

",10,2,dellambdatwo(10,2

)); }

執行結果

4:func和lambda的用法

看下**

public

static

void

lambdafunc()

;console.writeline(getfunc(

"我是第乙個引數

","我是第二個引數

"));

}

看下結果:

5:linq和lambda一起的用法(部分)

a:遍歷的用法

public

string

lambdaandeach()

else

});return

sbbuilder.tostring();

}

注釋1:createiislist()是生成乙個list的方法

看下結果:

b:where篩選和查詢的用法

public

void

lambdaandwhere()

", string.join("

",gidlist.toarray()));

console.writeline(

"獲取所有大於6的集合

", string.join("

", aalist.toarray()));

}

public listgetlist()

;user user2 = new user() ;

user user3 = new user() ;

user user4 = new user() ;

list

users = new list();

users.add(user1);

users.add(user2);

users.add(user3);

users.add(user4);

return

users;

}

看下結果:

6:表示式目錄樹用法

這是乙個操作的目錄樹然後用**執行

parameterexpression a = expression.parameter(typeof(int), "

a");//

建立乙個表示式樹中的引數,作為乙個節點(就是圖中的a)

parameterexpression b = expression.parameter(typeof(int), "b"

); binaryexpression ab = expression.multiply(a, b);//

這就是圖中的ab由a和b相乘得到的ab節點

parameterexpression c = expression.parameter(typeof(int), "c"

); parameterexpression d = expression.parameter(typeof(int), "d"

); binaryexpression cd =expression.multiply(c, d);

binaryexpression abcd = expression.multiply(ab, cd);//

這是由ab和cd相乘得到目前程式中的終節點

//abcd表示操作的程式,後面的表示引數

expressionint, int, int, int, int>> lambda = expression.lambdaint, int, int, int, int>>(abcd, a, b, c, d);

console.writeline(lambda + ""

);

//編譯,生成委託

func result =lambda.compile();

console.writeline(result(

2,2,2,2));

執行結果:

最後乙個我用的不多通過看相關資料總結的,至於怎麼樣,用在**。我還沒有深入的研究過。

不得不說的「跳槽」

現實中不難發現 越是高階人才,適合的機會就越少 的現象。身處金字塔中上層的人員,無論是職位還是薪水,起點都很高,這客觀上造成適合的職位機會少,職業路徑轉換成本過高等問題。我個人認為,it技術高層人士,如果要跳槽,務必要注意三宜和三忌。忌 病急亂投醫 宜 方法得當 公升遷至較高職位的人,大多都多年不找...

關於基礎,不得不說

最近遇到好多問題,都與基本概念相關。忍不住,就想多說幾句。研究生面試,我出了乙個問題,乙個100khz的方波訊號,幅度大約是幾伏的數量級,想測量其有效值,用什麼儀器,怎麼測?多數學生一臉茫然,搞的我不好意思,慚愧題目是不是太難了。我急了,問學生,乙個1.5v的電池,其電壓有效值是多少?學生問我,直流...

ios icon 不得不說的故事

圖示是ios程式包所必需的組成部分。如果你沒有提供程式所需的各種尺寸的圖示,程式上傳發布時可能會無法通過驗證。ios程式為兼顧不同的應用場景,定義了多個不同規格的圖示,並以不同的命名區分 圖示名稱 大小圓角 用途必需 icon.png 57 x 57 10px 用於程式商店和在iphone ipod...