创建Lambda包含表达式

时间:2011-07-01 09:15:00

标签: c# generics lambda

我想创建一个包含结构列表的类。

我有以下代码:

public struct MyData
{
    public int ID;
    public string Description;
}

public class MyClass
{
    private List<MyData> data;

    public bool Contains(string desc)
    {
        if (data != null)
        {
            return data.Contains(item => item.Description.Contains(desc));
        }

        return false;
    }        
}

我看不出为什么我无法使用Lambda表达式,我得到的错误是:

Cannot convert lambda expression to type 'MyApp.MyData' because it is not a delegate type

3 个答案:

答案 0 :(得分:4)

在您的情况下,Contains希望您传递MyData,如果您想使用lambda进行比较,请使用Any

return data.Any(item => item.Description.Contains(desc)); 

答案 1 :(得分:0)

public bool Contains( string desc )
{
    return data != null && data.Exists( item => item.Description.Contains( desc ) );
}

答案 2 :(得分:0)

原因是因为List<T>Contains方法需要T,而你给它一个lambda表达式,用=>创建。

你能做的是:

data.Any(item => item.Description.Contains(desc));