使用Func 委託返回匿名物件 灰身

2021-08-27 12:58:43 字數 2165 閱讀 8917

func 委託

封裝乙個具有兩個引數並返回 tresult 引數指定的型別值的方法。

語法

public

delegate tresult func<

in t1,

in t2,

out tresult>

(t1 arg1,

t2 arg2)

型別引數

in t1

此委託封裝的方法的第乙個引數型別。

該型別引數是逆變。即可以使用指定的型別或派生程度更低的型別。有關協變和逆變的更多資訊,請參見泛型中的協變和逆變。

in t2

此委託封裝的方法的第二個引數型別。

out tresult

此委託封裝的方法的返回值型別。

該型別引數是協變。即可以使用指定的型別或派生程度更高的型別。有關協變和逆變的更多資訊,請參見泛型中的協變和逆變。 引數

arg1型別:t1

此委託封裝的方法的第乙個引數。

arg2型別:t2

此委託封裝的方法的第二個引數。

返回值型別:tresult

此委託封裝的方法的返回值。

備註

可以使用此委託表示一種能以引數形式傳遞的方法,而不用顯式宣告自定義委託。

封裝的方法必須與此委託定義的方法簽名相對應。

也就是說,封裝的方法必須具有兩個均通過值傳遞給它的引數,並且必須返回值。

若要引用具有兩個引數並返回 void 的方法(或者要在 visual basic 中引用被宣告為 sub 而不是被宣告為 function 的方法),請改用泛型 action委託。

在使用 func

委託時,不必顯式定義乙個封裝具有兩個引數的方法的委託。

例如,以下**顯式宣告了乙個名為 extractmethod 的委託,並將對 extractwords 方法的引用分配給其委託例項。

示例

下面的示例演示如何宣告和使用 func

委託。此示例宣告乙個 func

變數,並將其分配給乙個採用 string 值和 int32 值作為引數的 lambda 表示式。

如果 string 引數的長度等於 int32 引數的值,則此 lambda 表示式將返回 true。

隨後在查詢中使用封裝此方法的委託來篩選字串陣列中的字串。

using

system;

using

system.collections.generic;

using

system.linq;

public

class

func3example

;ienumerable

awords = words.where(predicate).select(str =>

str);

foreach (string word

inawords)

console.writeline(word);}}

了解完這些以後,我們來看看它的應用。

不知道童鞋們有沒有遇到這樣的問題,在讀取資料訪問層中資料集合時,發現該方法需要返回的結果中包括物件及其外來鍵物件時,又不想新增乙個實體類來封裝它,那麼有什麼別的好辦法嗎?也許您會選擇用動態物件(dynamic關鍵字),不錯,這個這確實可以解決這個問題,但是有乙個弊端,且不論動態物件在執行時編譯,在編寫程式時,它存在乙個很不方便的體驗,它不能點(.)出它的屬性,不免產生意外的拼寫錯誤或是尋找-複製-黏貼的麻煩。

那麼怎麼辦呢?我們可以利用func 委託來幫助我們實現。

public ienumerablegetalluser(funcitemfactory)

;ilist

resultitems =

new list();

foreach (

var item

inresults.tolist())

return

resultitems;

}var query = userdao.getalluser((u, p) => ;

});此外,當然也可以自定義更多的委託,這裡筆者就不詳細介紹了,讀者可自行嘗試。

哈哈,這樣是否有幫到您呢?本人文筆粗糙簡陋,請多多大蝦們指教!

C 委託 使用匿名方法

使用c 委託還有另一種重要方法 通過匿名方法。其中,匿名方法是用作委託引數的乙個 塊。請看下面的例子 匿名方法的作用是使 更簡化,方便了程式設計師。如果沒有匿名方法,則定義一套事件監聽需要這樣 class program 一般來說,定義的myeventhandler方法只用來響應事件,只在上面那一處...

C 委託 使用匿名方法

使用c 委託還有另一種重要方法 通過匿名方法。其中,匿名方法是用作委託引數的乙個 塊。請看下面的例子 匿名方法的作用是使 更簡化,方便了程式設計師。如果沒有匿名方法,則定義一套事件監聽需要這樣 class program 一般來說,定義的myeventhandler方法只用來響應事件,只在上面那一處...

謹慎使用匿名物件

有時為了 簡潔我們會選擇使用匿名物件,但是它的生命週期是需要注意的,那就是當前執行語句分號結束後立即釋放!不是等到函式執行結束。比如有乙個工具函式 std string 獲取當前程序所在目錄 後續有幾處需要傳入 const char 型引數,為了 簡潔,我這樣寫 const char config ...