在c#中比较List的更好方法

时间:2013-05-14 13:28:23

标签: c# list

我有两个名单

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

学生班有3个属性

ID
Name
Section

现在我想循环遍历List<string>并将每个项目与List<Student>中的Name属性进行比较,并希望在它们不相等时执行操作

我尝试循环浏览名称并将每个值与stud进行比较。

但我认为必须有一些更好的方法可以使用LINQ或者我应该使用YIELD

由于

3 个答案:

答案 0 :(得分:6)

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

var studentsWithoutListedNames = stud.Where(s => !names.Contains(s.Name));
foreach (var student in studentsWithoutListedNames)
{
    // Whatever...
}

答案 1 :(得分: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);
} 

应该写Mary

答案 2 :(得分: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)
{
   ...
}