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

时间:2014-11-05 13:30:12

标签: c# list class

我创建了一个名为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是什么?

5 个答案:

答案 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.aspxhttp://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];

我总是使用这个...