以下带有布尔参数的代码运行良好:
public List<T> SearchByStatus(bool status, List<T> list)
{
return (List<T>)list.Where(_item => _item.Executed == status);
}
但如果我想使用这样的东西
public List<T> SearchByCodeType(ECodes codeType, List<T> list)
{
return (List<T>)list.Where(_item => _item.CodeType == codeType);
}
,IDE会抛出一个错误,指出Func<T, int, bool>
不接受1个参数。
我研究了一下,发现了例如this。
如果我现在添加一个seond参数,让我们说
public List<T> SearchByCodeType(ECodes codeType, List<T> list)
{
return (List<T>)list.Where((_item, _index) => _item.CodeType == codeType);
}
它说Func<T, bool>
不接受2个参数。
消息本身是正确的,但我不明白为什么它假设我想在第一种情况下使用Where的重载版本而在第二种情况下使用非重载......我做错了什么?
P.S。:使用的ECodes类型定义为
public enum ECodes : int
{
....
}
可能导致问题吗?
答案 0 :(得分: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();
}
如果他们不这样做 - 请检查您是否在顶部有using System.Linq;
,并且正在使用常规 LINQ(不像LINQBridge那样模糊不清)。
你也可以使用:
public List<T> SearchByCodeType(ECodes codeType, List<T> list)
{
return list.FindAll(_item => _item.CodeType == codeType);
}
请注意,所有这些都假定您在T
上有一个合适的通用约束,以便明确定义T.CodeType
- 大概是:
class Foo<T> where T : IHazCodeType
{
List<T> SearchByCodeType(ECodes codeType, List<T> list) {...}
}
interface IHazCodeType
{
ECodes CodeType {get;}
}