以下带有布尔参数的代码运行良好:
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)
可能导致这个问题?
这两个都应该工作正常:
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)
请注意,所有这些都假设您有一个合适的通用约束,T这T.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)