Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# lambda/匿名函数简介_C# - Fatal编程技术网

C# lambda/匿名函数简介

C# lambda/匿名函数简介,c#,C#,我从一个插件中得到了这个函数(来自上一篇文章) 调用此函数的行: get { return (ResolutionInfo)m_imageResources.Find(IsResolutionInfo); } 所以基本上我想去掉调用函数。它只被调用两次(一次在get中,另一次在set中)。它可以帮助我理解c#中的内联函数 这能澄清一切吗 为了进一步澄清问题,看看reflector,Find方法是这样的: public T Find(Predicate<T> ma

我从一个插件中得到了这个函数(来自上一篇文章)

调用此函数的行:

  get
  {
    return (ResolutionInfo)m_imageResources.Find(IsResolutionInfo);
  }
所以基本上我想去掉调用函数。它只被调用两次(一次在get中,另一次在set中)。它可以帮助我理解c#中的内联函数

这能澄清一切吗

为了进一步澄清问题,看看reflector,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);
}
public T-Find(谓词匹配)
{
if(match==null)
{
ThrowHelper.ThrowArgumentNullException(argument.match除外);
}
对于(int i=0;i
如您所见,它在集合中循环,对于集合中的每个项,它将该索引处的项传递给您传入的谓词(通过lambda)。因此,由于我们在处理泛型,它会自动知道您正在处理的类型。它将是类型T,它是您集合中的任何类型。有意义吗?

只是补充一下,列表上的“查找”函数(即m_imageresources)是否会自动将参数传递给IsResourtionInfo函数


还有,第一次强制转换或函数调用会发生什么?

谢谢,但是如果我这样做可以吗:(ImageResource x)=>x.ID==(int)ResourceIDs.ResolutionInfo ie向“x”添加类型不知道,试试看?委托语法允许(强制)您提供类型:new Func(委托(ImageResource x){return(int)ResourceIDs.ResolutionInfo;});但是恶心!函数调用发生在强制转换之前;您只是在内联声明一个小函数。不,您不能向参数添加类型,它会根据集合中的类型自动计算出来。我将编辑我的答案以显示Find方法的外观。
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);
}