6

我有两个清单说

List<string> names; and List<Student> stud;

学生类有 3 个属性

ID
Name
Section

现在我想遍历List<string>并比较每个项目与 Name 属性,List<Student>如果它们不相等则想要执行操作

我尝试遍历名称并将每个值与螺柱进行比较。

但我认为必须有一些更好的方法来做到这一点,LINQ或者我应该使用YIELD.

谢谢

4

3 回答 3

6

从您的描述中不是很清楚,但是如果您想要“所有姓名不在列表中的学生”,您绝对可以使用 LINQ:

var studentsWithoutListedNames = stud.Where(s => !names.Contains(s.Name));
foreach (var student in studentsWithoutListedNames)
{
    // Whatever...
}
于 2013-05-14T13:29:50.847 回答
2

如果您的意图不是 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);
} 

应该写玛丽

于 2013-05-14T13:39:39.333 回答
0

这样做的另一个好方法是:

var notOnList = students.Except(from student in students
                                join name in names on student.Name equals name
                                select student);
foreach(var student in notOnList)
{
   ...
}
于 2013-05-14T13:36:56.640 回答