2009-01-06 65 views
1

我有這個功能從插件(從以前的文章)介紹到的λ/匿名函數

// This method implements the test condition for 
// finding the ResolutionInfo. 
private static bool IsResolutionInfo(ImageResource res) 
{ 
    return res.ID == (int)ResourceIDs.ResolutionInfo; 
} 

而行,多數民衆贊成在調用這個函數:

get 
    { 
    return (ResolutionInfo)m_imageResources.Find(IsResolutionInfo); 
    } 

所以基本上我想擺脫通話功能。它只被調用兩次(一次在get中,另一次在set中)。它可以幫助我瞭解c#中的內聯函數。

回答

2
get 
    { 
    return (ResolutionInfo)m_imageResources.Find(res => res.ID == (int)ResourceIDs.ResolutionInfo); 
    } 

這是否完全清除它?

只是爲了進一步明確的事情了,看着反射,這是查找方法的樣子:

public T Find(Predicate<T> match) 
{ 
    if (match == null) 
    { 
     ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match); 
    } 
    for (int i = 0; i < this._size; i++) 
    { 
     if (match(this._items[i])) 
     { 
      return this._items[i]; 
     } 
    } 
    return default(T); 
} 

因此,大家可以看到,它遍歷集合,併爲集合中的每一個項目,它將該索引處的項目傳遞給您傳入的Predicate(通過您的lambda)。因此,由於我們正在處理泛型,它會自動知道您正在處理的類型。它將是類型T,它是您集合中的任何類型。說得通?

+0

三江源,但如果我這樣做行不行: (ImageResource X)=> x.ID ==(INT)ResourceIDs.ResolutionInfo 即增加一個類型爲 「X」 – masfenix 2009-01-06 02:33:12

0

只需添加,列表上的「查找」功能(這是m_imageresources是什麼)自動將參數傳遞給IsResoulutionInfo函數?

另外,首先會發生什麼事情演員或函數調用?