第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么我在 lambda 表達(dá)式中調(diào)用委托函數(shù)時(shí)保留了參數(shù)?

為什么我在 lambda 表達(dá)式中調(diào)用委托函數(shù)時(shí)保留了參數(shù)?

C#
慕標(biāo)琳琳 2021-12-25 16:56:51
我有以下 C# 代碼,我發(fā)現(xiàn)參數(shù)的值i被轉(zhuǎn)移到 lambda 表達(dá)式委托的下一次調(diào)用。string[] arrayOne = {"One", "Two", "Three", "Three", "Three"};string[] newArray = arrayOne.Where ((string n, int i)=> {return i++ <=2;} ).ToArray();// newArray is {"One","Two", "Three"}我的期望是i每次調(diào)用委托都會(huì)傳遞一個(gè)新參數(shù)。我知道由于閉包,在 lambda 表達(dá)式中使用的局部變量在所有調(diào)用中都會(huì)保留,但這是一個(gè)參數(shù)。問題:為什么在i對(duì)委托的所有調(diào)用中都保留了參數(shù)的值?
查看完整描述

2 回答

?
守候你守候我

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊

有兩個(gè)覆蓋 linq where。


public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, int, bool> predicate);

public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);

您調(diào)用使用第二個(gè)參數(shù)int類型值意味著您的數(shù)組索引。


public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, int, bool> predicate);

這將返回集合中索引值小于或等于 2 的值。


Where ((string n, int i)=> {return i++ <=2;})

但是i++沒有意義,因?yàn)槟x開了委托函數(shù)范圍,自動(dòng)增量 i 的值不保留


查看完整回答
反對(duì) 回復(fù) 2021-12-25
?
蕭十郎

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊

我的期望是每次調(diào)用委托都會(huì)傳遞一個(gè)新參數(shù)。我知道由于閉包,在 lambda 表達(dá)式中使用的局部變量在所有調(diào)用中都會(huì)保留,但這是一個(gè)參數(shù)。


在調(diào)用之間不保留該參數(shù)。然而,第二個(gè)參數(shù) (the int i) 是一個(gè)index,因此它由函數(shù)本身的邏輯遞增.Where(..)。


在Where它看起來或多或少像:


public static IEnumerable<T> Where(this IEnumerable<T> data, Funct<T, int, bool> p) {

    int i = 0;

    foreach(T t in data) {

        if(p(t, i)) {

            yield return t;

        }

        i++;

    }

}

注意:如果我們檢查源代碼,我們會(huì)看到它委托給WhereIterator執(zhí)行邏輯的函數(shù)。我聽說提供了一個(gè)更“干凈”的實(shí)現(xiàn)來解釋這個(gè)想法。


請(qǐng)注意i++:在索引遞增由所述Where功能。不管i函數(shù)中的做了什么,我們每次都用另一個(gè)值調(diào)用它。Anint不是引用對(duì)象,因此您無法更新數(shù)字的“狀態(tài)”。


以下面的調(diào)用為例:


csharp> arrayOne.Where ((string n, int i)=> {i += 2; return i <= 4;} )

{ "One", "Two", "Three" }

在這里,我們?cè)黾觟用2,我們看到的確是低于指數(shù)2(由兩個(gè)或指數(shù)增加是小于4)仍然是相同的。因此指數(shù)并沒有讓兩個(gè)或三個(gè)跳。


查看完整回答
反對(duì) 回復(fù) 2021-12-25
  • 2 回答
  • 0 關(guān)注
  • 175 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)