介绍lambda /匿名函数

时间:2009-01-06 02:24:25

标签: c#

我有一个插件(来自上一篇文章)的这个功能

// 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 个答案:

答案 0 :(得分:2)

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

这样清楚了吗?

为了进一步清理,查看反射器,这就是Find方法的样子:

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);
}

正如您所看到的,它遍历集合,并且对于集合中的每个项目,它将该索引处的项目传递给您传入的谓词(通过您的lambda)。因此,由于我们处理泛型,它会自动知道您正在处理的类型。它将是Type T,它是您收藏中的任何类型。有意义吗?

答案 1 :(得分:0)

只是要添加,列表上的“查找”功能(m_imageresources是什么)会自动将参数传递给IsResoulutionInfo函数吗?

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