C# 为什么LINQ表达式中的FindIndex不起作用?
我的程序创建一个列表,用C# 为什么LINQ表达式中的FindIndex不起作用?,c#,linq,C#,Linq,我的程序创建一个列表,用Person对象填充它,并尝试查找与列表中第一个对象同名的下一个对象的索引。知道特定索引的位置后,程序可以将原始列表拆分为两个不同的列表。然而,出于某种原因,当我期望LINQ表达式返回值5时,它为splitLocation返回零。显然,我的LINQ表达式做得不对,或者我不明白应该如何使用FindIndex。这是我的密码: using System.Collections.Generic; using System.Linq; namespace NeedleInHays
Person
对象填充它,并尝试查找与列表中第一个对象同名的下一个对象的索引。知道特定索引的位置后,程序可以将原始列表拆分为两个不同的列表。然而,出于某种原因,当我期望LINQ表达式返回值5时,它为splitLocation
返回零。显然,我的LINQ表达式做得不对,或者我不明白应该如何使用FindIndex
。这是我的密码:
using System.Collections.Generic;
using System.Linq;
namespace NeedleInHaystack
{
class Program
{
static void Main(string[] args)
{
// create the 'haystack'
var people = new List<Person>();
var person1 = new Person("Frank");
var person2 = new Person("Jules");
var person3 = new Person("Mark");
var person4 = new Person("Allan");
var person5 = new Person("Frank");
var person6 = new Person("Greg");
var person7 = new Person("Tim");
people.Add(person1);
people.Add(person2);
people.Add(person3);
people.Add(person4);
people.Add(person5);
people.Add(person6);
people.Add(person7);
// here's the 'needle'
var needle = people[0].Name;
var listA = new List<Person>();
var listB = new List<Person>();
// find the needle in the haystack
var splitLocation = people.FindIndex(person => person.Name.Equals(needle));
listA = people.Take(splitLocation).ToList();
listB = people.Skip(splitLocation).ToList();
}
}
public class Person
{
public Person(string name)
{
Name = name;
}
public string Name { get; set; }
}
}
使用System.Collections.Generic;
使用System.Linq;
命名空间堆栈
{
班级计划
{
静态void Main(字符串[]参数)
{
//创建“干草堆”
var people=新列表();
var person1=新人(“弗兰克”);
var person2=新人(“朱尔斯”);
var person3=新人(“标记”);
var person4=新人(“艾伦”);
var person5=新人(“弗兰克”);
var person6=新员工(“Greg”);
var person7=新人(“Tim”);
添加(person1);
添加(person2);
添加(person3);
添加(person4);
添加(person5);
添加(person6);
添加(person7);
//这是“针”
var针=人[0]。姓名;
var listA=新列表();
var listB=新列表();
//大海捞针
var splitLocation=people.FindIndex(person=>person.Name.Equals(针));
listA=people.Take(splitLocation.ToList();
listB=people.Skip(splitLocation.ToList();
}
}
公共阶层人士
{
公众人物(字符串名称)
{
名称=名称;
}
公共字符串名称{get;set;}
}
}
您正在查找与第一个项目同名的下一个项目,但您不会跳过第一个项目!使用的过载包括起始位置:
var splitLocation = people.FindIndex(1, person => person.Name.Equals(needle));
请注意,如果没有找到匹配项,它将返回-1
,因此您的Take
将爆炸。您正在查找与第一个项目同名的下一个项目,但您没有跳过第一个项目!使用的过载包括起始位置:
var splitLocation = people.FindIndex(1, person => person.Name.Equals(needle));
请注意,如果没有找到匹配项,它将返回
-1
,因此您的Take
将爆炸。非常感谢!我不知道FirstIndex的重载会让我指定一个起始索引。我甚至都没想看。我非常感谢你的帮助!非常感谢!我不知道FirstIndex的重载会让我指定一个起始索引。我甚至都没想看。我非常感谢你的帮助!