簡體   English   中英

對C#函數輸出感到困惑

[英]Confused about C# function output

當我腦海中遍歷這個示例時,我得到的輸出為4 8 3 但是,當我運行該函數時,得到的輸出是4 8 6 ,我知道如何獲取48但是我不明白y = 6 y = 3不應該嗎? a1運行導致y +=1因此y = 1然后a2運行導致y+=2因此y = 3

void Main() {
    int y = 0;
    Func<int,bool> even = (n) => { return n%2 == 0; };
    Func<int,int> dub = (n) => { y += 2; return n + n; };
    Func<int,int> succ = (n) => { y += 1; return n + 1; };

    Func<bool, int, int, int> if1 = (c, t, f) => c? t: f;
    y = 0;
    var a1 = if1(even(3), dub(3), succ(3));
    var a2 = if1(even(4), dub(4), succ(4));

    Console.WriteLine("{0} {1} {2}", a1, a2, y);
}

即使在if1中有一個只使用tf的條件表達式,發送給if1的值始終在調用之前計算。

要僅在需要時計算值,可以將委托而不是值發送給函數:

Func<bool, Func<int>, Func<int>, int> if1 = (c, t, f) => c ? t() : f();
y = 0;
var a1 = if1(even(3), () => dub(3), () => succ(3));
var a2 = if1(even(4), () => dub(4), () => succ(4));

您必須在這里意識到的是,對if1的兩次調用都傳遞了dubsucc返回值 (因為您實際上是在調用它們)。

var a1 = if1(even(3), dub(3), succ(3));
var a2 = if1(even(4), dub(4), succ(4));

這意味着無論是否使用返回值(由if1確定),方法都已運行並已修改y 這就是為什么它是6,因為dubsucc都被程序調用了兩次,並且2 + 2 + 1 + 1 = 6

暫無
暫無

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

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