12 5 4 在 C 中實現查詢運算子

2021-06-01 22:03:34 字數 746 閱讀 3967

12.5.4 在 c# 中實現查詢運算子

當我們在清單 12.14 中,討論序列和分析 selectmany 操作時,已經看到如何把 c# 查詢轉換為方法呼叫。我們將只支援查詢以 select 子句結尾,而忽視那些僅對集合有用的情況,比如分組。這意味著,我們就需要實現 select 擴充套件方法。

我們已經知道,selectmany 方法對應於 bind 函式,但是,它稍微複雜,因為它取乙個額外的函式,我們將需要在返回結果之前執行它。select 方法更簡單,但是,我們要看過**之後,再討論。清單 12.20 顯示這兩個基元的實現。

listing 12.20 implementing query operators (c#)

funcselector)

funcresultselector)

}selectmany 運算子開始有點亂,但是,在看引數的型別時,是有用的。可以告訴我們,我們可以傳遞什麼引數給什麼函式。實現開始像 f# 的 bind 成員一樣,通過呼叫第二個引數值給定的函式,在提取了第乙個引數值之後。我們還必須把源中的值,與第乙個函式返回的值組合起來。為了得到結果,我們呼叫第二個函式,把這兩個值傳給函式。最後,把結果打包到這個計算型別,並從方法返回。

在清單 12.18 中,實現了運算子之後,查詢表示式將會編譯並執行。我們在這一節中建立的計算型別,不會為這個計算增加任何額外的方面。這一簡單事實,使它成為標準操作的好模板。我們可以實現更複雜的一元型別,從這個模板開始,看看我們需要改到什麼。現在,把這個想法放到實踐中,為選項型別實現類似的運算子。

C 中 運算子 和 運算子

運算子定義在將可空型別分配給非可空型別時返回的預設值。int?c null 若 c 為 null,則 d 為 1,否則把 c 值賦予 d int d c 1 型別名稱後加問號,如 int?i null double?d null bool?b null 可指定可為 null 的 int double...

運算子在C 中的作用

我們在學習新的知識或是 某些 時常常看到 的符號,它是什麼意思,有什麼作用呢?1 的作用 的解釋為 對某一常數轉化為二進位制時對各位進行取反,是一種位運算。舉個例子 4 的二進位製碼為 100 取反之後 變為 011 同時正負顛倒,於是 4 在數值上等於 5 同理 1046 1047 0 1 等等。...

在C 中運算子 和 的區別

點和箭頭運算子都在c 中用於訪問類的成員。首先要明白的關鍵點是,在c 中,宣告為class,struct或union的型別被視為 類型別 以下將說明兩者區別 它們用於不同的場景 1.a.b 被用於當 b 是物件 a 的成員,需要訪問這個成員 b 的時候會使用a.b這樣的方式。對這種方式,如果 a 是...