2009-01-06 66 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函数?

另外,首先会发生什么事情演员或函数调用?