resposta_SOpt_370746

CSharp · Console

/Program.cs

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
					
public class Program
{
	public static IEnumerable<T> VerificarItensRepetidos<T>(IEnumerable<T> listString)
	{
		List<object> duplicateKeys = new List<object>();
		List<object> notDuplicateKeys = new List<object>();
		foreach (var text in listString)
		{
			if (notDuplicateKeys.Contains(text))
			{
				duplicateKeys.Add(text);
			}
			else
			{
				notDuplicateKeys.Add(text);
			}
		}
		return duplicateKeys.Cast<T>();
	}
	
	public static void Main()
	{
		List<Pessoa> listaPessoas = new List<Pessoa>();
		//Adiciona algumas pessoas a lista
		listaPessoas.Add(new Pessoa{
			Id = 1,
			Nome = "George",
			DataNascimento = DateTime.ParseExact("23/03/2000", "dd/MM/yyyy", CultureInfo.InvariantCulture)
		});
		listaPessoas.Add(new Pessoa{
			Id = 1,
			Nome = "João",
			DataNascimento = DateTime.ParseExact("05/09/1997", "dd/MM/yyyy", CultureInfo.InvariantCulture)
		});
		listaPessoas.Add(new Pessoa{
			Id = 1,
			Nome = "Giovane",
			DataNascimento = DateTime.ParseExact("23/03/2000", "dd/MM/yyyy", CultureInfo.InvariantCulture)
		});
		listaPessoas.Add(new Pessoa{
			Id = 1,
			Nome = "Maria",
			DataNascimento = DateTime.ParseExact("11/07/1990", "dd/MM/yyyy", CultureInfo.InvariantCulture)
		});
		listaPessoas.Add(new Pessoa{
			Id = 1,
			Nome = "Antonio",
			DataNascimento = DateTime.ParseExact("23/03/2000", "dd/MM/yyyy", CultureInfo.InvariantCulture)
		});
		listaPessoas.Add(new Pessoa{
			Id = 1,
			Nome = "José",
			DataNascimento = DateTime.ParseExact("11/07/1990", "dd/MM/yyyy", CultureInfo.InvariantCulture)
		});
		
		Console.WriteLine("Todas as pessoas da lista: ");
		foreach(var pessoa in listaPessoas)
		{
			Console.WriteLine(string.Format("id: {0}, Nome: {1}, Data Nascimento: {2}", pessoa.Id, pessoa.Nome, pessoa.DataNascimento.ToShortDateString()));
		}
		Console.WriteLine("");
		
		var nascimentosRepetidos = VerificarItensRepetidos(listaPessoas.Select(d => d.DataNascimento).ToList());
		
		//Utilizei o Distinct aqui para imprimir apenas uma vez cada grupo
		foreach(var data in nascimentosRepetidos.Distinct())
		{
			var pessoasMesmoGrupoDataNasc = listaPessoas.Where(d => d.DataNascimento == data).ToList();
			
			Console.WriteLine(string.Format("Pessoas do grupo de data {0}", data.ToShortDateString()));
			foreach(var pessoa in pessoasMesmoGrupoDataNasc)
			{
				Console.WriteLine(string.Format("id: {0}, Nome: {1}, Data Nascimento: {2}", pessoa.Id, pessoa.Nome, pessoa.DataNascimento.ToShortDateString()));
			}
		}
	}
}

public class Pessoa
{
	public int Id { get; set; }
	public string Nome { get; set; }
	public DateTime DataNascimento { get; set; }
}
;