LINQ在哪里不接受1或2个参数

Kai*_*che 1 c# linq

以下带有布尔参数的代码运行良好:

public List<T> SearchByStatus(bool status, List<T> list)
{
    return (List<T>)list.Where(_item => _item.Executed == status);
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我想使用这样的东西

public List<T> SearchByCodeType(ECodes codeType, List<T> list)
{
    return (List<T>)list.Where(_item => _item.CodeType == codeType);
}
Run Code Online (Sandbox Code Playgroud)

,IDE抛出一个错误Func<T, int, bool>,说不接受1个参数.我研究了一下,发现了这个例子.如果我现在添加一个seond参数,让我们说

public List<T> SearchByCodeType(ECodes codeType, List<T> list)
{
    return (List<T>)list.Where((_item, _index) => _item.CodeType == codeType);
}
Run Code Online (Sandbox Code Playgroud)

它说Func<T, bool>不要接受2个参数.

消息本身是正确的,但我不明白为什么它假设我想在第一种情况下使用Where的重载版本而在第二种情况下使用非重载...我做错了什么?

PS:使用的ECodes类型定义为

public enum ECodes : int
{
    ....
}
Run Code Online (Sandbox Code Playgroud)

可能导致这个问题?

Mar*_*ell 5

这两个都应该工作正常:

public List<T> SearchByCodeType(ECodes codeType, List<T> list)
{
    return list.Where((_item, _index) => _item.CodeType == codeType).ToList();
}

public List<T> SearchByCodeType(ECodes codeType, List<T> list)
{
    return list.Where(_item => _item.CodeType == codeType).ToList();
}
Run Code Online (Sandbox Code Playgroud)

如果他们不这样做 - 请检查你是否using System.Linq;在顶部,并使用常规 LINQ(不像LINQBridge那样模糊不清).

你也可以使用:

public List<T> SearchByCodeType(ECodes codeType, List<T> list)
{
    return list.FindAll(_item => _item.CodeType == codeType);
}
Run Code Online (Sandbox Code Playgroud)

请注意,所有这些都假设您有一个合适的通用约束,TT.CodeType是一个明确定义的 - 大概是:

class Foo<T> where T : IHazCodeType
{
    List<T> SearchByCodeType(ECodes codeType, List<T> list) {...}
}
interface IHazCodeType
{
    ECodes CodeType {get;}    
}
Run Code Online (Sandbox Code Playgroud)