有关用于检查重复对象的语法的问题

Aindrea

成员
已加入
2018年6月5日
留言内容
23
编程经验
1-3
我打算检查列表中包含的重复对象,并且已计划将Linq用于此目的。我想说明一下如何通过使用具有名字,名字和年龄的学生对象来检查重复项。

在这里您可以看到解决方案:

C#:
using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleAppDuplicateTest
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Student> lList = new List<Student>();
            lList.Add(new Student("Joana", "Miller", 23));
            lList.Add(new Student("Peter", "Hanson", 24));
            lList.Add(new Student("Cindy", "Peterson", 26));
            lList.Add(new Student("Theodore", "Rumsfeld", 20));
            lList.Add(new Student("Adolph", "Saxe", 21));
           
            bool hasDuplicates = ((from s in lList group s by new { s.firstName, s.secondName, s.age } into g
                                                where g.Count() > 1 select g).SelectMany(g => g).Count() > 0);

            Console.WriteLine(hasDuplicates);
            Console.ReadLine();
        }
    }

  internal class Student
        {
            public string firstName;
            public string secondName;
            public int age;

            public Student(string fName, string sName, int a)
            {
                firstName = fName;
                secondName = sName;
                age = a;
            }
        }
}

我仍然对这种解决方案不满意的是,我无法通过使用getter访问字段变量,如下所示:

C#:
       bool hasDuplicates = ((from s in lList
                                   group s by new { s.GetFirstName(), s.GetSecondName(), s.GetAge() }
                                                into g
                                   where g.Count() > 1
                                   select g).SelectMany(g => g).Count() > 0);

编译器突出显示的错误是"匿名类型成员的无效声明"。我一直在寻找一种使用吸气剂的解决方法。那里有什么解决方法吗?
 

Aindrea

成员
已加入
2018年6月5日
留言内容
23
编程经验
1-3
C#:
using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleAppDuplicateTest
{

    class Program
    {

        static void Main(string[] args)
        {
            List<Student> lList = new List<Student>();
            lList.Add(new Student("Joana", "Miller", 23));
            lList.Add(new Student("Peter", "Hanson", 24));
            lList.Add(new Student("Cindy", "Peterson", 26));
            lList.Add(new Student("Theodore", "Rumsfeld", 20));
            lList.Add(new Student("Theodore", "Rumsfeld", 20));
          
            bool hasDuplicates = ((from s in lList
                                                group s by new { firstName = s.GetFirstName(),
                                                    secondName = s.GetSecondName
                                                    () , age = s.GetAge() }
                                                into g
                                                where g.Count() > 1
                                                select g).SelectMany(g => g).Count() > 0);
 
            Console.WriteLine(hasDuplicates);
            Console.ReadLine();

        }

        private string fnMethod(Student st)
        {
            return st.GetFirstName();
        }
    }


非常感谢您的提示-现在它就像这样。
 
Last edited:
最佳 底部