我有一个插件(来自上一篇文章)的这个功能
// 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#中的内联函数。
答案 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函数吗?
此外,首先演员或函数调用会发生什么?