亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Linq:執行鏈查詢的順序

Linq:執行鏈查詢的順序

C#
狐的傳說 2021-11-21 15:22:29
我想了解如何處理鏈查詢。例如,讓我們考慮以下查詢var sumOfRoots = numbers           //IEnum0      .Where(x => x > 0)            //IEnum1      .Select(x => Math.Sqrt(x))    //IEnum2      .Select(x => Math.Exp(x))     //IEnum3      .Sum();哪里例如 numbers={-1, 4, 9 }.這是幕后發生的事情嗎:1. 獲取所有枚舉器(正向傳遞)numbersGetEnumerator()返回(讓我們用它表示)IEnum0實例的調用IEnum0GetEnumerator()返回IEnum1實例的調用IEnum1GetEnumerator()返回IEnum2實例的調用IEnum2GetEnumerator()返回IEnum3實例的調用2.調用MoveNext(向后傳遞).Sum()電話MoveNext()上IEnum3IEnum3電話MoveNext()上IEnum2IEnum2電話MoveNext()上IEnum1IEnum1電話MoveNext()上IEnum03. 從 MoveNext 返回(前后傳)IEnum0移動到 element-1并返回true。IEnum1檢查是否-1滿足條件(這是不正確的),所以IEnum1電話MoveNext()上IEnum0。IEnum0移動到 element4并返回true。IEnum1檢查是否4滿足條件(這是真的)并返回trueIEnum2什么也不做,只是返回的輸出IEnum1是trueIEnum2什么也不做,只是返回的輸出IEnum2是true4.Calling Current(向后傳).Sum()電話Current上IEnum3。IEnum3電話Current上IEnum2IEnum2電話Current上IEnum1IEnum1電話Current上IEnum05. 回流(正向傳遞)IEnum0 回報 4IEnum1 回報 4IEnum2 回報 sqrt(4)=2IEnum3 回報 exp(2)6. 重復步驟 2.-5。直到第 3 步。返回 false如果鏈式查詢的處理方式不同,請糾正我。
查看完整描述

1 回答

?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

您可以使用委托來了解執行順序。例子:


static void Main(string[] args)

{

    var numbers = new []{ -1, 4, 9 };


    double sumOfRoots = numbers.Where(IsGreaterThanZero)   

                               .Select(ToSquareRoot)      

                               .Select(ToExp)              

                               .Sum(x => ToNumber(x));


    Console.WriteLine($"sumOfRoots = {sumOfRoots}");


    Console.Read();

}


private static double ToNumber(double number)

{

    Console.WriteLine($"SumNumber({number})");


    return number;

}


private static double ToSquareRoot(int number)

{

    double value =  Math.Sqrt(number);


    Console.WriteLine($"Math.Sqrt({number}): {value}");


    return value;

}


private static double ToExp(double number)

{

    double value =  Math.Exp(number);


    Console.WriteLine($"Math.Exp({number}): {value}");


    return value;

}


private static bool IsGreaterThanZero(int number)

{

    bool isGreater = number > 0;


    Console.WriteLine($"{number} > 0: {isGreater}");


    return isGreater;

}

輸出:


-1 > 0:錯誤


4 > 0:真


Math.Sqrt(4): 2


Math.Exp(2): 7.38905609893065


SumNumber(7.38905609893065)


9 > 0:真


Math.Sqrt(9): 3


Math.Exp(3): 20.0855369231877


SumNumber(20.0855369231877)


sumOfRoots = 27.4745930221183


查看完整回答
反對 回復 2021-11-21
  • 1 回答
  • 0 關注
  • 177 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號