2011-07-01 80 views
1

我想创建一个包装结构列表的类。创建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 
+0

如果你指的'Enumerable.Contains'它不接受一个lambda作为参数。 –

回答

4

你的情况Contains希望你传递给它一个MyData,如果你想用比较的拉姆达然后使用Any

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

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

你可以做的是:

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