为了账号安全,请及时绑定邮箱和手机立即绑定

c# - 如何在列表中查找带有列的对象#

c# - 如何在列表中查找带有列的对象#

C#
动漫人物 2021-10-23 16:22:40
我叫蒂亚戈!我正在学习 C#。我需要做一个练习,在带有分区(列)的列表中搜索一个对象。C# 版本 4.5.2 Visual Studio 2017列表:alunosMatriculados.Add(new Aluno { matAluno = 2, nomeAluno = "MARIANA DA SILVA", cpfAluno = "111.111.111-12", turmaAluno = "2I", numFaltas = 0 });alunosMatriculados.Add(new Aluno { matAluno = 3, nomeAluno = "ANA MARIA SILVEIRA", cpfAluno = "111.111.111-13", turmaAluno = "1H", numFaltas = 5 });alunosMatriculados.Add(new Aluno { matAluno = 4, nomeAluno = "ROBERTO LINS", cpfAluno = "111.111.111-14", turmaAluno = "3H", numFaltas = 1 });好的。问题是“在用户插入的列表中搜索某些内容”我试过:string name; Console.WriteLine("Student's name");    name = Console.ReadLine();    Console.WriteLine(alunosMatriculados.Find(x => x.nomeAluno.Contains(name)));varname是学生的名字 nomeAluno是学生的名字(我是巴西人...)请有人帮助我!
查看完整描述

2 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

这是我的想法:


    class Aluno

    {

        public int matAluno { get; set; }

        public string nomeAluno { get; set; }

        public string cpfAluno { get; set; }

        public string turmaAluno { get; set; }

        public int numFaltas { get; set; }

    }


    static void Main(string[] args)

    {

        var alunosMatriculados = new List<Aluno>();

        alunosMatriculados.Add(new Aluno { matAluno = 2, nomeAluno = "MARIANA DA SILVA", cpfAluno = "111.111.111-12", turmaAluno = "2I", numFaltas = 0 });

        alunosMatriculados.Add(new Aluno { matAluno = 3, nomeAluno = "ANA MARIA SILVEIRA", cpfAluno = "111.111.111-13", turmaAluno = "1H", numFaltas = 5 });

        alunosMatriculados.Add(new Aluno { matAluno = 4, nomeAluno = "ROBERTO LINS", cpfAluno = "111.111.111-14", turmaAluno = "3H", numFaltas = 1 });


        foreach(var aluno in FindByName(alunosMatriculados, "SIL"))

        {

            Console.WriteLine(aluno.nomeAluno);

        }


        Console.ReadLine();

    }


    static IEnumerable<Aluno> FindByName( IEnumerable<Aluno> alunos, string partOfName )

    {

        //TODO error handling 

        //TODO use brazilian culture, if needed

        return  alunos

            .Where(a => !string.IsNullOrEmpty(a.nomeAluno))

            .Where(a => a.nomeAluno.Contains(partOfName));

    }


    static Aluno FindFirstByName(IEnumerable<Aluno> alunos, string name)

    {

        return FindByName(alunos, name)?.FirstOrDefault();

    }



查看完整回答
反对 回复 2021-10-23
?
炎炎设计

TA贡献1808条经验 获得超4个赞

这是因为作为结果List<T>.Find返回T,Console.WriteLine并将打印对象.ToString()作为输出。结果是打印出来Aluno.ToString(),默认是类名。我会这样写


Aluno a = alunosMatriculados.Find(x => x.nomeAluno.Contains(name));

if (a != null) 

{

     // ... Whatever you want to do with 

}

else Console.WriteLine("Not found");

这样,我们涵盖了可能没有任何项目符合我们的条件的情况。但是,仍然存在可能有多个匹配项的情况,我建议您查找如何使用 LINQ Where,foreach以便您可以打印所有匹配项。


查看完整回答
反对 回复 2021-10-23
  • 2 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信