2012-04-15 39 views
0

我不明白下面一行:x => x.Id == _purchase.Centre.Id我不明白這是如何工作x => x.Id == _purchase.Centre.Id?

的代碼是在這裏:

private void LoadCentreOptions() 
{ 
    MaterialCentreDataSource mcds = new MaterialCentreDataSource(); 
    List<MaterialCentre> centres = mcds.GetAll() as List<MaterialCentre>; 

    _blankCentre = new MaterialCentre() 
    { 
     Name = Strings.JournalViewModel_CreditedPartyOption_NotSpecified 
    }; 

    centres.Insert(0, _blankCentre); 
    _centreOptions = new ReadOnlyCollection<MaterialCentre>(centres); 

    if (_purchase.Centre == null) 
     _purchase.Centre = _blankCentre; 
    else 
     _purchase.Centre = _centreOptions.First(x => x.Id == _purchase.Centre.Id); 
} 

在這裏的調試時間我正在看的是X.Id遞增。怎麼有可能?

+0

然後閱讀c#中的lambda函數。對於一個Stackoverflow問題太大的話題。投票結束。 – 2012-04-15 12:15:17

+0

@TonyHopkinson他沒有問「向我解釋所有的lambda」,他只是詢問了一條線......而這些傢伙已經回答了他簡單但很好的答案...... – 2012-04-15 12:19:30

+0

這兩個人都解釋了這個Lambda,如果他知道lambda他不需要這個解釋哪一個就這麼簡單。我知道我第一次看到他們,我的眼睛也開始流血了。 – 2012-04-15 14:51:08

回答

5

的API First被列舉在收集和應用條件檢查哪一個比賽,然後返回第一場比賽。所以有效的代碼轉換爲

foreach(var centreOption in _centreOptions) 
{ 
    if(centreOption.Id==_purchase.Centre.Id) 
     return centreOption; 
} 

,如果你瞭解LINQ它基本上短for

_centreOptions.Where(x => x.Id == _purchase.Centre.Id).First(); 

要了解首讀的確切實施Jon Skeets blogpost

+0

提供的鏈接已經不存在了。 – 2017-04-13 09:17:48

0

這條線運行在_centreOptions可枚舉的每一個元素:

_purchase.Centre = _centreOptions.First(x => x.Id == _purchase.Centre.Id); 

和檢查,如果對象的Id等於_purchase.Centre.Id
它將返回滿足條件的第一個元素。

所以你在兩次迭代中看到兩個id

相關問題