хз, я с батей из куска ржавой жести и такой же качественной проволоки скрутили параллелепипед назвали его мангалом и юзаем уже 4й год на даче, эстетически это ржавое корыто, но шашлык на нем жарить можно
однополые отношения не дают потомства
гдето читал, что шарп видя в структуре ссылочные поля начинает елозить рефлексией, и думается мне, что если поля с поддержкой компараторов то шарп таки будет через них сравнивать, плохо уже помню
длинная портянка, и если переделать чутка в compare, то можно с помощью линка Any(f(u,u2) 0) и т.п.

да это менее эффективно чем портянка, но я вообще не понимаю зачем использовать шарп если нужна производительность, единственное чем он мне нравится так это гибкость и быстрота разработки, нужна скорость юзай ++
кстати вродекак тут если все параметры примитивы, и делать не класс а структуру, то шарп и так бинарно сравнит
ну тут как говориться на вкус и цвет, комуто мясо подавай, комуто графений... лично для меня игра детства была System Shock 2, потом Sillent Hill, ни халфа ни дум ни квака для меня ничего особенно не представляют
да и к томуже не знаю насколько ты пользовался рефлексией, но с ней можно делать все что душе угодно совместно с атрибутами, хоть в космос запускай
весь WPF это сплошная рефлексия, там плюнуть негде попадешь в рефлексию
можно запилить один хелпер, и иметь во все щели все объекты опятьже руля лишь атрибутами
рефлексия может применяться шарпами даже там, где ты сам не хотел этого, например равнение 2х структур где есть ссылочные параметры и нет перегрузки для сравнения
я поэтому и написал, что не эффективно, но если используется не часто, то допустимо, особенно если полей дофига, и они будут добавляться, проще пометить атрибутом нужные поля и оставить все на рефлексию, чем лесть и править портянки

твой вариант я и сам использую если код для себя, но это один хер огромная портянка неудобная для чтения
блин както херово напиисал
ConsoleAppI - Microsoft Visual Studio	Быстрый запуск (Ctrl+Q)
Файл Правка Вид Проект Сборка Отладка Команда Сервис 1ест Анализ Окно Справка О-	- £] У d* 9	' Debug - Any CPU	-	► Пуск -	^ -	i=] ^Tl 1 ’J И
^ Program.es* •*> X j=j HU ConsoleAppI	” ConsoleAppI.Program
^	1	Busing	System;
2	2	using
смотря с чем. и есть ли IEqualityComparer у объекта, примитивы норм и так проверяются, а объекты по умолчанию по ссылкам, поэтому нужно компарер задавать, сильно не пинайте. полтора года уже шарпы не трогал.
а вариантов в упрощении 2а, либо через рефлексию перебор параметров по атрибутам, не эффективно но в рот ебать, зато не этот ужас, и добавлять ноывые проверяемые элеметы проще, просто въебать их в класс и усе
либо завести массив типа
static List> conditions = new List>() {
(a, b) => a.FirstName == b.FirstName,
(a, b) => a.LastName == b.LastName
};
lst.All(f => user1, user2);