我创建了一个名为studentRecord
的类,它包含多个属性,例如Student Number, First Name, Last Name, Courses, and Credit Hours
,用于跟踪个别学生记录。我还创建了一个名为list
的{{1}}来存储各种对象(学生)。
我了解通过使用List<studentRecord> lstRecords = new List<studentRecord>();
添加student
对象,但是在编辑对象时遇到了麻烦。用户应该能够输入学号,然后能够访问和编辑该对象的特定实例的属性。我想出了这段代码:
lstRecords.Add();
(顺便说一下,StudentRecord editRecord = lstRecords.Find(indexRecord =>
indexRecord.intStudentNumber == intChosenRecord);
是我声明的变量,用于跟踪他们正在寻找的索引)
我知道intChosenRecord
声明了该类型的新对象,而StudentRecord
是我的新对象的名称。但是,我在使用editRecord
方法时遇到了问题。我意识到.Find()
搜索列表以找到与输入匹配的某些。因此,我假设.Find()
是程序正在搜索的内容。
但是,我不知道intChosenRecord
是什么!这是它在代码中使用的唯一时间,我可以将其更改为我想要的任何名称而不会出错。有人可以解释这段代码的作用,以及indexRecord
是什么?
答案 0 :(得分:0)
“indexRecord”是一个变量,对应于列表中的每个学生。 “查找”停止并在“=&gt;”右侧返回当前学生一次条件(或“谓词”)是真的。 因此,只要您在“=&gt;”左右使用相同的名称,就可以根据需要对其进行命名。
类似的循环可能是:
StudentRecord editRecord = null;
foreach(var indexRecord in lstRecords)
{
if(indexRecord.intStudentNumber == intChosenRecord))
{
editRecord = indexRecord;
break; // Exits the loop.
}
}
这段代码不是很干净,但我为了清楚起见而给出了它,因为它与你的“oldschool”循环相同,这对你来说当然更为熟悉。
有关此语法的详细信息,请参阅http://msdn.microsoft.com/fr-fr/library/bb397687.aspx。 http://msdn.microsoft.com/fr-fr/library/bb397926.aspx用于“查找”以外的其他方法。
答案 1 :(得分:0)
indexRecord
是lambda表达式的参数。它可以有你想要的任何名字。在您的情况下,它代表StudentRecord
(列表中的元素)
您可以通过以下方式轻松更改代码:
StudentRecord editRecord = lstRecords.Find(x => x.intStudentNumber == intChosenRecord);
您可以在许多网站上了解有关lambda表达式的更多信息,如http://www.dotnetperls.com/lambda
答案 2 :(得分:0)
变量editRecord
是指Find()
返回的匹配,因此它不会创建新对象或任何新实例;它指的是现有的实例。
将indexRecord
视为用于迭代集合中所有项目的标识符,就像您说:
var numbers = new List<int>();
foreach (var n in numbers)
{
// do something with n
}
您可以将n或indexRecord替换为您喜欢的任何标识符。
答案 3 :(得分:0)
当您使用&#34; =&gt;&#34;时,您使用的是lambda expression。
在你的情况下,&#34; indexRecord&#34;是lambda表达式的输入参数的变量名称&#34; indexRecord.intStudentNumber == intChosenRecord&#34;。 indexRecord对应于列表中存储的学生。
我建议您熟悉lambda表达式,因为它是c#强大且常用的功能。
答案 4 :(得分:0)
试试这个..
List<int> idlist=lstRecords.select(t=>t.intStudentNumber).toList();
int index=idlist.indexof(intChosenRecord);
studentRecord record=lstRecords[index];
我总是使用这个...