我的Lambda表达有什么不对?

use*_*142 -1 .net c# lambda list

我正在尝试用C#编写一个简单的Lambda表达式:

int numElements = 3;
string[]firstnames = {"Dave", "Jim", "Rob"};
string[]lastnames = {"Davidson", "Jameson", "Robertson"};

List<Person> people = new List<Person>();

for(int i = 0 ; i < numElements; i++)
{
    people.Add(new Person { FirstName = firstnames[i], LastName = lastnames[i] });                
}

bool test = people.Contains(p => p.FirstName == "Bob");
Run Code Online (Sandbox Code Playgroud)

我对Lambda表达式以及它们如何工作的理解仍然有点阴暗,我对于为什么这不起作用我很恼火......我试图找出一个列表是否包含一个名字......

jjr*_*rdk 7

你在找:

bool test = people.Any(p => p.FirstName == "Bob");
Run Code Online (Sandbox Code Playgroud)

或者你在混合Rob和Bob?


Jar*_*Par 6

这里的问题不是lambdas,而是for循环的边界.您定义的数组长度为3,但numElements定义的值为10.这意味着在循环的第4次迭代中,您将获得非法数组索引的异常.请尝试以下方法

int numElements = 3;
Run Code Online (Sandbox Code Playgroud)

或者更简单地删除numElements变量,而是迭代到firstnames数组的长度

for (int i = 0; i < firstnames.length; i++) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

编辑

OP表示numElements最初发布的是一个拼写错误.代码中的其他可能的错误来源

  • 如果要查找匹配元素,请使用"Rob"而不是"Bob"
  • Contains方法GenericList<T>需要具有兼容的委托签名. Func<T, bool>例如