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()在这种情况下是否是正确的方法;我会使用,因为您应该只得到一个结果,如果有多个结果,您会希望出现错误。此答案已自动标记为低质量,因为没有对代码的解释,可能会被删除。请加一个解释。哦,这是有道理的。谢谢谢谢你!这很有帮助