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

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

從IEnumerable <T>計(jì)算項(xiàng)目而不進(jìn)行迭代?

從IEnumerable <T>計(jì)算項(xiàng)目而不進(jìn)行迭代?

嗶嗶one 2019-10-25 10:30:09
private IEnumerable<string> Tables{    get    {        yield return "Foo";        yield return "Bar";    }}假設(shè)我要迭代這些并編寫類似#m的#n處理。有沒有一種方法可以在我的主迭代之前不進(jìn)行迭代就找出m的值?我希望我能說清楚。
查看完整描述

3 回答

?
慕少森

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

IEnumerable不支持這一點(diǎn)。這是設(shè)計(jì)使然。IEnumerable使用惰性評(píng)估來獲取您需要的元素,然后再使用它們。


如果您想在不迭代的情況下知道項(xiàng)目的數(shù)量,可以使用ICollection<T>,它具有一個(gè)Count屬性。


查看完整回答
反對(duì) 回復(fù) 2019-10-25
?
慕斯王

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

的System.Linq.Enumerable.Count擴(kuò)展方法IEnumerable<T>具有以下實(shí)現(xiàn):


ICollection<T> c = source as ICollection<TSource>;

if (c != null)

    return c.Count;


int result = 0;

using (IEnumerator<T> enumerator = source.GetEnumerator())

{

    while (enumerator.MoveNext())

        result++;

}

return result;

因此,它嘗試強(qiáng)制轉(zhuǎn)換為ICollection<T>具有Count屬性的,并在可能的情況下使用它。否則進(jìn)行迭代。


因此,最好的選擇是Count()在IEnumerable<T>對(duì)象上使用擴(kuò)展方法,因?yàn)槟菢訒?huì)獲得最佳性能。


查看完整回答
反對(duì) 回復(fù) 2019-10-25
?
慕斯709654

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

只需添加一些額外的信息:


該Count()擴(kuò)展并不總是迭代??紤]將Linq轉(zhuǎn)換為Sql,其中將計(jì)數(shù)發(fā)送到數(shù)據(jù)庫,但是它不帶回所有行,而是發(fā)出Sql Count()命令并返回該結(jié)果。


另外,編譯器(或運(yùn)行時(shí))足夠聰明,Count()如果有的話,它將調(diào)用objects 方法。因此,它不是像其他響應(yīng)者所說的那樣,完全無知并且總是為了計(jì)數(shù)元素而反復(fù)進(jìn)行。


在許多情況下,程序員只是if( enumerable.Count != 0 )使用Any()擴(kuò)展方法進(jìn)行檢查,因?yàn)閕f( enumerable.Any() ) linq的惰性評(píng)估會(huì)更有效,因?yàn)橐坏┐_定有任何元素,它就會(huì)短路。它也更具可讀性


查看完整回答
反對(duì) 回復(fù) 2019-10-25
  • 3 回答
  • 0 關(guān)注
  • 453 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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