C# 如何从自定义类的列表中获取对象?

C# 如何从自定义类的列表中获取对象?,c#,asp.net,linq,C#,Asp.net,Linq,我有一个名为Student的班级,它包括一个名字和一些分数,这些分数对这个问题来说并不重要。如何从列表对象中按姓名选择单个学生?List listOfStudents=new List(); students.FirstOrDefault(s => s.Name == studentName); // ... //把一些数据放到学生名单上 // ... var searchName=“MyName”; var singleStudent=listOfStudents.Single(s=>

我有一个名为Student的班级,它包括一个名字和一些分数,这些分数对这个问题来说并不重要。如何从列表对象中按姓名选择单个学生?

List listOfStudents=new List();
students.FirstOrDefault(s => s.Name == studentName);
// ... //把一些数据放到学生名单上 // ... var searchName=“MyName”; var singleStudent=listOfStudents.Single(s=>s.name==searchName); //或SingleOrDefault(s=>s.name==searchName)
学生列表=新列表();
// ...
//把一些数据放到学生名单上
// ...
var searchName=“MyName”;
var singleStudent=listOfStudents.Single(s=>s.name==searchName);
//或SingleOrDefault(s=>s.name==searchName)

StudentList
成为通过代码维护的
学生的列表(学生对象)。考虑你想根据他/她的名字选择第一个学生。然后,您可以使用列表,它将为您提供满足给定条件的第一个匹配学生对象:如果您需要获取名称将等于搜索文本的所有学生,则可以使用列表

List StudentList=newlist();
//TODO:在此处填充列表
string searchName=“luckey”;
student FirstStudent=StudentList
.FirstOrDefault(x=>String.Equals(searchName,
x、 名字,
StringComparison.CurrentCultureInogoreCase);
//第一个叫勒基的学生
List searchResult=StudentList
.Where(x=>String.Equals(searchName,
x、 名字,
StringComparison.CurrentCultureInogoreCase)
.ToList();
//名为luckey的学生的子列表

StudentList
成为通过代码维护的
学生的列表(学生对象)。考虑你想根据他/她的名字选择第一个学生。然后,您可以使用列表,它将为您提供满足给定条件的第一个匹配学生对象:如果您需要获取名称将等于搜索文本的所有学生,则可以使用列表

List StudentList=newlist();
//TODO:在此处填充列表
string searchName=“luckey”;
student FirstStudent=StudentList
.FirstOrDefault(x=>String.Equals(searchName,
x、 名字,
StringComparison.CurrentCultureInogoreCase);
//第一个叫勒基的学生
List searchResult=StudentList
.Where(x=>String.Equals(searchName,
x、 名字,
StringComparison.CurrentCultureInogoreCase)
.ToList();
//名为luckey的学生的子列表

有很多方法可以做到这一点。最简单的方法是使用如下循环:

List<Student> list = new List<Student>();
Student matchedStudent = null;
string inputStudentName = "SomeName";
foreach (var student in list)
{
    if (String.Equals(inputStudentName, student.Name, StringComparison.CurrentCultureIgnoreCase))
    {
        matchedStudent = student;
        break;
    }
}

if (matchedStudent != null)
{
    //student found
}
还有其他LINQ方法可以获取单个对象,如
single
SingleOrDefault

如果您希望获得符合您标准的所有学生的集合,则可以执行以下操作:

var matchedStudentCollection = list.Where(s => String.Equals(inputStudentName, s.Name, StringComparison.CurrentCultureIgnoreCase));

最好从循环开始,然后阅读更多关于循环的内容,这样您就可以使用LINQ编写更短、更优雅的代码

有很多方法可以做到这一点。最简单的方法是使用如下循环:

List<Student> list = new List<Student>();
Student matchedStudent = null;
string inputStudentName = "SomeName";
foreach (var student in list)
{
    if (String.Equals(inputStudentName, student.Name, StringComparison.CurrentCultureIgnoreCase))
    {
        matchedStudent = student;
        break;
    }
}

if (matchedStudent != null)
{
    //student found
}
还有其他LINQ方法可以获取单个对象,如
single
SingleOrDefault

如果您希望获得符合您标准的所有学生的集合,则可以执行以下操作:

var matchedStudentCollection = list.Where(s => String.Equals(inputStudentName, s.Name, StringComparison.CurrentCultureIgnoreCase));

最好从循环开始,然后阅读更多关于循环的内容,这样您就可以使用LINQ编写更短、更优雅的代码

如果您想开始学习LINQ,可以从这里开始:

此表达式是“lambda表达式”:

这是一个匿名函数。它会为列表中的每个项目调用。为了更清楚一点,你可以写

(Student s) => s.Name == searchName
s
是参数。由于
学生
列表
,编译器可以推断参数的类型

在常规C#中,您可以这样编写它——但是使用这种函数定义,它无法访问局部变量
searchName
,因此您必须执行一些笨拙的操作才能使其正常工作。lambda表达式可以“看到”定义它的所有局部变量,这简化了一切

function bool Predicate(Student s) {
    return s.Name == searchName;
}
FirstOrDefault可能返回null

如果您想对丢失的学生或多余的学生姓名(在学生的特殊情况下,这两个名字听起来都是个坏主意)抛出异常,您可以只需要一个匹配项:

var student = students.Single(s => s.Name == searchName);
如果可能有几个,而你想要全部

var studentEnumeration = students.Where(s => s.Name == searchName);
这将返回一个查询,您可以循环:

foreach (var student in studentEnumeration) {
    //  Rap each student on the knuckles with a ruler
}

如果您想开始学习LINQ,可以从这里开始:

此表达式是“lambda表达式”:

这是一个匿名函数。它会为列表中的每个项目调用。为了更清楚一点,你可以写

(Student s) => s.Name == searchName
s
是参数。由于
学生
列表
,编译器可以推断参数的类型

在常规C#中,您可以这样编写它——但是使用这种函数定义,它无法访问局部变量
searchName
,因此您必须执行一些笨拙的操作才能使其正常工作。lambda表达式可以“看到”定义它的所有局部变量,这简化了一切

function bool Predicate(Student s) {
    return s.Name == searchName;
}
FirstOrDefault可能返回null

如果您想对丢失的学生或多余的学生姓名(在学生的特殊情况下,这两个名字听起来都是个坏主意)抛出异常,您可以只需要一个匹配项:

var student = students.Single(s => s.Name == searchName);
如果可能有几个,而你想要全部

var studentEnumeration = students.Where(s => s.Name == searchName);
这将返回一个查询,您可以循环:

foreach (var student in studentEnumeration) {
    //  Rap each student on the knuckles with a ruler
}

你知道如何写循环吗?比如for、while等?是的,但我对foreach循环不太熟悉。所以你有一个student类型的对象列表?您想根据student类的name属性提取一个吗?正确,student中有一个名为name的字符串。cs@dvs-如果你是f