1

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

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 个参数。我研究了一下,发现了这个。如果我现在添加第二个参数,可以说

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

Func<T, bool>说不接受 2 个参数。

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

PS:使用的 ECodes-type 定义为

public enum ECodes : int
{
    ....
}

这会导致问题吗?

4

1 回答 1

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;}    
}
于 2013-11-07T13:54:48.783 回答