using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication18
{
class Program
{
static void Main(string[] args)
{
var list1 = new List<MyClass>() {
new MyClass {
Id = Guid.Parse("C0AFA906-40D3-4FAA-B7D2-000B6C17CA93"),
str = "qwer"
},
new MyClass {
Id = Guid.Parse("D4AB9FBF-E6F2-4236-A0BE-000C9C55F6D9"),
str = "asd"
},
new MyClass {
Id = Guid.Parse("АB9C258F-58F4-4F96-8B15-000E38BD55CC"),
str = "zxc"
}
};
var list2 = new List<MyClass>() {
new MyClass {
Id = Guid.Parse("C0AFA906-40D3-4FAA-B7D2-000B6C17CA93"),
str = "qwer"
},
new MyClass {
Id = Guid.Parse("D4AB9FBF-E6F2-4236-A0BE-000C9C55F6D9"),
str = "asd"
}
};
var list3 = new List<MyClass>();
foreach (var item1 in list1)
{
foreach (var item2 in list2)
{
if (item1.Id == item2.Id)
list3.Add(item1);
}
}
foreach (var item in list3)
{
Console.WriteLine($"Результат: Id={item.Id}, str={item.str}");
//Результат две строки: Id=C0AFA906-40D3-4FAA-B7D2-000B6C17CA93, str=qwer;
// Id =D4AB9FBF-E6F2-4236-A0BE-000C9C55F6D9, str=asd
}
}
}
public class MyClass
{
public Guid Id { get; set; }
public string str { get; set; }
}
}
Для того, чтобы удалить все элементы подходящие под условие можно использовать метод RemoveAll
Далее в предикате нужно проверить условие, что проверяемого элемента нет во втором списке, для этого можно использовать метод Exists
В итоге код может выглядеть так:
list1.RemoveAll(el=> !list2.Exists(el2=>el2.Id == el.Id))
Либо можно использовать метод Intersect
var list3 = list1.Intersect(list2, new CompareByGuid());
Где класс CompareByGuid может иметь следующую реализацию:
class CompareByGuid : IEqualityComparer<MyClass>
{
// Products are equal if their names and product numbers are equal.
public bool Equals(MyClass x, MyClass y)
{
//Check whether properties are equal.
return x.Id == y.Id;
}
// If Equals() returns true for a pair of objects
// then GetHashCode() must return the same value for these objects.
public int GetHashCode(MyClass a)
{
//Calculate the hash code for the product.
return x.Id.GetHashCode();
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
При развертывании проекта (чтение sms-сообщений), после получения сообщения приложение открывается три разаПо-моему OnCreate() запускается несколько...
Как завершить tcp соединение для windowsnetworking
Вот стал вроде как простой вопросНеобходимо в windows forms получить изображение из видео потока
Я пишу сайт на которое пользователи загружают ms word документы, а сайт редактирует документы с помощью COMПоэтому мне нужно чтобы на сервере...