C#如何访问类列表的特定索引

C#如何访问类列表的特定索引,c#,list,class,C#,List,Class,我创建了一个名为studentRecord的类,它包含几个属性,如学生编号、名字、姓氏、课程和学分,用于跟踪各个学生的记录。我还创建了一个名为listlstrecords=newlist()的list存储各种对象(学生) 我理解通过使用lstRecords.Add()添加student对象,但我在编辑对象时遇到了麻烦。用户应该能够输入学生编号,然后能够访问和编辑对象特定实例的属性。我想出了以下代码: StudentRecord editRecord = lstRecords.Find(index

我创建了一个名为
studentRecord
的类,它包含几个属性,如
学生编号、名字、姓氏、课程和学分,用于跟踪各个学生的记录。我还创建了一个名为
listlstrecords=newlist()的
list
存储各种对象(学生)

我理解通过使用
lstRecords.Add()添加
student
对象,但我在编辑对象时遇到了麻烦。用户应该能够输入学生编号,然后能够访问和编辑对象特定实例的属性。我想出了以下代码:

StudentRecord editRecord = lstRecords.Find(indexRecord => 
                    indexRecord.intStudentNumber == intChosenRecord);
(顺便说一下,
intChosenRecord
是我声明的一个变量,用于跟踪他们要查找的索引)

我知道
StudentRecord
正在声明该类型的新对象,并且
editRecord
是我的新对象的名称。但是,我在使用
.Find()
方法时遇到了问题。我意识到
.Find()
会在列表中搜索与输入匹配的内容。因此,我假设
intChosenRecord
是程序正在搜索的内容

然而,我不知道什么是
indexRecord
!这是唯一一次在代码中使用它,我可以将它更改为我想要的任何名称,而不会出现错误。有人能解释一下这个代码是做什么的,以及什么是索引记录吗?

“索引记录”是一个对应于列表中每个学生的变量。 一旦“=>”右侧的条件(或“谓词”)为真,“查找”停止并返回当前学生。 因此,只要在“=>”的左右两侧使用相同的名称,就可以随意命名它

类似的循环可以是:

StudentRecord editRecord = null;

foreach(var indexRecord in lstRecords)
{                   
    if(indexRecord.intStudentNumber == intChosenRecord))
    {
        editRecord = indexRecord;
        break; // Exits the loop.
    }
}
这段代码不是很干净,但为了清晰起见,我给出了它,因为它与您的代码一样,使用了一个“oldschool”循环,这对您来说肯定更熟悉

有关此语法的详细信息,请参阅。
对于“Find”以外的其他方法,

indexRecord
是lambda表达式的参数。它可以有你想要的任何名字。在您的情况下,它表示一个
StudentRecord
(列表中的一个元素)

您可以通过以下方式轻松更改代码:

StudentRecord editRecord = lstRecords.Find(x => x.intStudentNumber == intChosenRecord);

您可以在许多站点上了解有关lambda表达式的更多信息,因为变量
editRecord
引用了
Find()
返回的匹配,因此它不会创建任何新对象或新实例;它指的是一个现有的实例

indexRecord
视为用于迭代集合中所有项的标识符,如您所说:

var numbers = new List<int>();
foreach (var n in numbers)
{
    // do something with n
}
var number=新列表();
foreach(数值中的变量n)
{
//用n做点什么
}
您可以用您喜欢的任何标识符替换n或indexRecord。

当您使用“=>”时,您使用的是一个

在本例中,“indexRecord”是lambda表达式“indexRecord.intStudentNumber==intChosenRecord”的输入参数的变量名。和indexRecord对应于存储在列表中的学生

我建议您熟悉lambda表达式,因为它是c#的一个强大且常用的功能。

试试这个

List<int> idlist=lstRecords.select(t=>t.intStudentNumber).toList();
int index=idlist.indexof(intChosenRecord);
studentRecord record=lstRecords[index];
List idlist=lstrecks.select(t=>t.intStudentNumber.toList();
int index=idlist.indexof(intChosenRecord);
studentRecord=lstRecords[索引];

我总是使用这个…

它是当前在LINQ表达式中处理的元素的简单别名。它也可以被称为超人。总之,这仅仅意味着:找到满足条件的所有元素(我们称之为indexRecord);我不确定Find()在这种情况下是否是正确的方法;我会使用,因为您应该只得到一个结果,如果有多个结果,您会希望出现错误。此答案已自动标记为低质量,因为没有对代码的解释,可能会被删除。请加一个解释。哦,这是有道理的。谢谢谢谢你!这很有帮助