假设我们有一个类(class)学生
class Student
{
public string Name { get; set; }
public string Gender { get; set; }
public List<string> Subjects { get; set; }
public static List<Student> GetAllStudetns()
{
List<Student> listStudents = new List<Student>
{
new Student
{
Name = "Tom",
Gender = "Male",
Subjects = new List<string> { "ASP.NET", "C#" }
},
new Student
{
Name = "Mike",
Gender = "Male",
Subjects = new List<string> { "ADO.NET", "C#", "AJAX" }
}
};
return listStudents;
}
}
我们想打印出每个学生的科目如下:
所以我找到的答案是
var result = Student.GetAllStudents().SelectMany(s => s.Subjects, (student, subject) => new { StudentName = student.Name, SubjectName = subject});
//then use foreach loop to retrieve...
我可以理解 => 的第二个用法,这只是对匿名类型的投影。但我不明白第一部分
s => s.Subjects, (student, subject)
根据我的理解,=>的左边是输入参数,在这种情况下是Student实例s,但=>的右边应该是与Student实例s相关的返回类型,例如s.Name如果我们想要得到学生的名字,那么 (student, subject) 是什么意思?
最佳答案
SelectMany 过载。见 https://msdn.microsoft.com/en-us/library/bb534631(v=vs.110).aspxs => s.Subjects
是您的集合选择器 - 将应用于输入的每个元素的变换(student, subject) => new { StudentName = student.Name, SubjectName = subject}
是您的结果选择器 - 应用于中间序列的每个元素的变换函数
关于c# - lambda 参数如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41420656/