Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么LINQ表达式中的FindIndex不起作用?_C#_Linq - Fatal编程技术网

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的重载会让我指定一个起始索引。我甚至都没想看。我非常感谢你的帮助!