簡體   English   中英

為什么c#中的lambdas似乎以不同的方式處理布爾返回值?

[英]Why do lambdas in c# seem to handle boolean return values differently?

考慮這段代碼:

Func<int, bool> TestGreaterThanOne = delegate(int a) {
                 if (a > 1) return (true);
                 else return(false);
                 };

在上面的代碼中,我無法刪除“else return(false)”語句 - 編譯器警告並非所有代碼路徑都返回一個值。 但是在下面的代碼中,使用了lambda ...

Func<int, bool> TestGreaterThanOne = a => a > 1;

我沒有“else”語句 - 沒有編譯器警告,邏輯按預期工作。

這里有什么機制可以讓我在lambda中沒有“else”語句?

因為在你的lambda速記中,也沒有if語句。 你的lambda速記相當於

Func<int, bool> TestGreaterThanOne = delegate(int a) { 
             return (a > 1);
             }; 

因此,所有代碼路徑都返回一個值。

要稍微添加其他響應,在lambda語句中, a > 1計算為布爾值,然后返回該布爾值。

一般來說,寫return true; return false; 陳述被認為是多余的。 只返回表達式求值的內容更簡單。

作為重寫委托的替代方法,你的lambda抽象等同於

Func<int, bool> TestGreaterThanOne = a => {
             if (a > 1) return (true);
             else return(false);
             };

你無法刪除else分支的地方。 因為它也不會返回。 當前版本有效,因為a > 1是布爾值(始終存在)。

在你提到的情況下,我認為它們不會以不同的方式處理布爾值。 代碼只是做了兩件事。 由於您將Func定義為Func<int, bool>因此它需要一個布爾返回值。 第二段代碼總是返回一個布爾值。 但是,除非包含else,否則第一段代碼不會返回布爾值。

a>1本身就是一個布爾值,這就是你的lambda工作的原因。 你幾乎可以把if語句想象成一個帶有布爾參數的函數,所以你可以做類似的事情

boolean b = true

if(b)
    doSomething();

它將編譯並執行doSomething

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM