我有两个清单说
List<string> names; and List<Student> stud;
学生类有 3 个属性
ID
Name
Section
现在我想遍历List<string>
并比较每个项目与 Name 属性,List<Student>
如果它们不相等则想要执行操作
我尝试遍历名称并将每个值与螺柱进行比较。
但我认为必须有一些更好的方法来做到这一点,LINQ
或者我应该使用YIELD
.
谢谢
从您的描述中不是很清楚,但是如果您想要“所有姓名不在列表中的学生”,您绝对可以使用 LINQ:
var studentsWithoutListedNames = stud.Where(s => !names.Contains(s.Name));
foreach (var student in studentsWithoutListedNames)
{
// Whatever...
}
如果您的意图不是 Jon 所描述的,而是更多地将姓名列表与学生姓名列表进行比较并找出差异:
var invalidStudents = names.Zip(stud, (name, student) => new {name, student}).
Where(item => (item.name != item.student.Name));
if (invalidStudents.Any()) // Or foreach...
{
...
}
例如:
var names = new string[] { "John", "Mary" };
var stud = new Student[] { new Student(1, "John", "IT"), new Student(2, "Jack", "Math") };
var invalidStudents = names.Zip(stud, (name, student) => new {name, student}).
Where(item => (item.name != item.student.Name));
foreach (var item in invalidStudents)
{
Console.WriteLine(item.name);
}
应该写玛丽
这样做的另一个好方法是:
var notOnList = students.Except(from student in students
join name in names on student.Name equals name
select student);
foreach(var student in notOnList)
{
...
}