C# 如何在c中查找列列表中的对象#
我叫蒂亚戈!我在学C。我需要做一个练习,在带有分区(列)的列表中搜索对象 C#版本4.5.2 Visual Studio 2017 名单如下:C# 如何在c中查找列列表中的对象#,c#,C#,我叫蒂亚戈!我在学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 Alun
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
是学生的名字(我是巴西人…)
谁来帮帮我 这是因为List.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
,以便可以打印所有匹配项。以下是我的想法:
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();
}
class-Aluno
{
公共int matAluno{get;set;}
公共字符串nomeAluno{get;set;}
公共字符串cpfAluno{get;set;}
公共字符串turmaAluno{get;set;}
公共整数numFaltas{get;set;}
}
静态void Main(字符串[]参数)
{
var alunosMatriculados=新列表();
添加(新Aluno{matAluno=2,nomeAluno=“MARIANA DA SILVA”,cpfAluno=“111.111.111-12”,turmaAluno=“2I”,numFaltas=0});
添加(新Aluno{matAluno=3,nomeAluno=“ANA MARIA SILVEIRA”,cpfAluno=“111.111.111-13”,turmaAluno=“1H”,numFaltas=5});
添加(新Aluno{matAluno=4,nomeAluno=“ROBERTO LINS”,cpfAluno=“111.111.111-14”,turmaAluno=“3H”,numFaltas=1});
foreach(FindByName中的var aluno(alunosMatriculados,“SIL”))
{
控制台写入线(aluno.nomeAluno);
}
Console.ReadLine();
}
静态IEnumerable FindByName(IEnumerable alunos,名称的字符串部分)
{
//TODO错误处理
//TODO使用巴西文化,如果需要
返回阿鲁诺斯
.Where(a=>!string.IsNullOrEmpty(a.nomeAluno))
其中(a=>a.nomeAluno.Contains(partOfName));
}
静态Aluno FindFirstByName(IEnumerable alunos,字符串名称)
{
返回FindByName(alunos,name)?.FirstOrDefault();
}
那么您在使用此代码时面临的问题是什么?这个代码应该生成什么输出以及您得到什么输出?我需要根据学生的姓名显示所有行数据。例如:当用户输入“Mariana da Silva”时,您需要的是注册(matAluno)、CPF(cpfaluno)、班级(学生班级)和学生缺勤(numFaltas)。您在代码方面面临什么问题?当我尝试此代码时:字符串名称;Console.WriteLine(“学生姓名”);name=Console.ReadLine();WriteLine(alunosMatriculados.Find(x=>x.nomeAluno.Contains(name));输出为ProjectName.classnamewo。很紧张。我还在学习。。。无法解释:静态Aluno FindFirstByName(IEnumerable alunos,字符串名称){返回FindByName(alunos,名称)?.FirstOrDefault();}