【发布时间】:2020-07-04 16:31:55
【问题描述】:
在 LINQ 中将委托作为 Where 参数传递时遇到问题。
我在命名空间中声明一个委托:
public delegate bool FilterInt<in T>(T x);
我已经做了一个分配给委托的方法,然后分配它:
public static bool FilterData(int val)
{
if (val < 10)
return true;
return false;
}
当我尝试使用委托过滤列表时,出现编译时错误“无法从 FilterInt 转换为 Func
listInt.Where(_filterer);
但是,我可以毫无问题地使用以下(隐含的委托?):
listInt.Where(FilterData);
如果我按照以下方式在命名空间中定义我自己的委托,则当我关注委托 here 上的 MSDN 文档时,我遇到了与 _comparer 相同的问题:
public delegate int Comparison<in T>(T x, T y);
public static int CompareLength(string left, string right) =>
right.Length.CompareTo(left.Length);
readonly Comparison<string> _comparer = CompareLength;
list.Sort(_comparer);
但是,如果我省略比较的初始声明,它可以正常工作(注意 - 比较存在于系统命名空间中)。
我认为这是我最初的委托声明的问题。
【问题讨论】:
-
_filterer的类型是什么? -
你可以这样使用 .Where(x => FilterInt(x))
-
_filterer 的类型为 FilterInt
。我知道有办法解决这个问题,但我想弄清楚为什么这种方法特别不起作用