Способы получить отдельный список объектов

У меня есть список объектов.

public class UserProperties
{
    public int Id { get;set; }
    public string Name { get;set; }
    public string ColorCode { get; set; }
}

List<UserProperties> userList = new List<UserProperties>();

Мне нужно взять отдельный список из этого. Здесь поле Id является уникальным полем. Есть ли возможность взять отдельный список?

Если это означает список строк, то используйте функцию distinct. Это будет работать. Но в моем случае это список объектов. Мы не можем использовать отличные друг от друга напрямую.


person Nivitha Gopalakrishnan    schedule 23.09.2019    source источник
comment
Я просматриваю несколько сайтов по этому поводу. Но это решение ко мне не применимо. - Какие решения вы нашли? Почему они не были применимы?   -  person Llama    schedule 23.09.2019
comment
stackoverflow.com/questions/24901975 /, c-sharpcorner.com/UploadFile/8c19e8/, stackoverflow.com/questions/13438673/ .......... Я просмотрел эти сайты.   -  person Nivitha Gopalakrishnan    schedule 23.09.2019
comment
И почему они не применимы? Особенно этот ответ, который кажется именно тем решением, которое вам нужно? Мы не можем использовать отличные друг от друга напрямую. - вы абсолютно можете, если подготовите свой класс к этому, как описано в вопросе, на который вы ссылаетесь.   -  person Llama    schedule 23.09.2019
comment
Абсолютно не дубликат! Вы можете реализовать уникальный список пользовательских свойств, подобных этому, раскрывая все методы списка, которые вам нужно использовать. открытый класс UserPropertiesList: IEnumerable‹UserProperties› {частный список только для чтения‹UserProperties› Items = new List‹UserProperties›(); ... По крайней мере, с перечислителями, Count, this, Add, проверьте, содержит ли Items уже объект с таким же идентификатором, если ( Items.Count(up => up.Id == item.Id) != 0 ) выдайте новое исключение и Удалять.   -  person Olivier Rogier    schedule 23.09.2019
comment
@Olivier Почему это не дубликат? И как ваше предложение решает проблему, которую ОП описывает лучше, чем использование .Distinct? Решение, на которое я специально указал, также позволит OP создать HashSet<UserProperties>, который будет использовать методы объекта GetHashCode/Equals или пользовательский IEqualityComparer.   -  person Llama    schedule 23.09.2019
comment
Он не хочет принимать отличия, он хочет запретить добавление элемента, если в списке уже есть элемент с таким же идентификатором! HashSet не решает проблему.   -  person Olivier Rogier    schedule 23.09.2019
comment
@Olivier Нет, ОП нигде не указывал это требование ни в вопросе, ни в комментариях. И нет, HashSet не основан на уникальной ссылке.   -  person Llama    schedule 23.09.2019
comment
Да, он уточнил, что ему нужно: здесь поле Id — уникальное поле. Когда написано, что мне нужно взять отдельный список из этого, это означает наличие списка элементов с идентификаторами без дубликатов по идентификаторам.   -  person Olivier Rogier    schedule 23.09.2019
comment
@Olivier Демонстрация работы Distinct и HashSet.   -  person Llama    schedule 23.09.2019
comment
@ Оливье Да, именно так. Он хочет отдельный список. HashSet<UserProperties> или .Distinct() LINQ были бы идеальным инструментом для работы. Поэтому этот вопрос является дубликатом.   -  person Llama    schedule 23.09.2019
comment
@Olivier В связанном примере я также включил использование .Distinct(), которое работало с List. Компаратор равенства по умолчанию для любого объекта использует методы GetHashCode и Equals типа. Если они не реализованы, используется база object. Вот почему вы не можете сравнить пользовательский тип, если вы не перегрузили их (или не указали компаратор для объекта).   -  person Llama    schedule 23.09.2019
comment
Никогда не использовал HashSet, но хорошо, это тоже решает проблему. Но напомните, что List и HashSet немного отличаются... У вас нет индексатора. И Distinct позволяет брать отдельные элементы в списке с дубликатами, поэтому здесь это, безусловно, не решение. Так что это не дубликат отдельного решения.   -  person Olivier Rogier    schedule 23.09.2019
comment
@Olivier Distinct позволяет брать отдельные элементы в списке с дубликатами, поэтому здесь это, безусловно, не решение. - ОП не упомянул об изменении списка в своем вопросе. OP сказал Мне нужно взять отдельный список из этого, т.е. у меня есть список, из которого мне нужно получить список отдельных элементов, именно для чего предназначен .Distinct.   -  person Llama    schedule 23.09.2019
comment
Вы можете попросить его разъяснить это, потому что уникальный идентификатор равен уникальному списку, а не отличается от неуникального списка... Таким образом, HashSet и Distinct, похоже, не являются решением. Особенно, если ему нужен индексатор.   -  person Olivier Rogier    schedule 23.09.2019
comment
@Olivier Какой смысл использовать Distinct в уникальном списке? Вы получите тот же список обратно. Если OP хочет лучшего решения, то OP может отредактировать свой вопрос, чтобы уточнить, что они просят. На данный момент я чувствую, что вы читаете этот вопрос больше, чем есть.   -  person Llama    schedule 23.09.2019
comment
Если вопрос состоит в том, чтобы иметь список с уникальными идентификаторами и индексатором, решение было дано в комментарии как реализация оболочки для списка‹›.   -  person Olivier Rogier    schedule 23.09.2019
comment
@Olivier По крайней мере, мы уверены, что этот вопрос следует закрыть. :-) Если мы не можем договориться о том, что хочет сделать ОП, тогда это неясно.   -  person Llama    schedule 23.09.2019