Найти элемент объекта в списке

У меня есть файл данных, заполненный строками Dog{Name, Classification, Country, Use}. Я сделал Сорт, объясняющий, что такое собаки, и Список, чтобы хранить их. Все работает без проверок, которые я сейчас добавляю.

Я хотел бы проверить, существует ли имя собаки в списке, поэтому я добавляю это условие:

if (Dog.IndexOf(Fields[0]) == -1)

но у меня ошибка

Argument 1: Cannot convert from 'string' in Dogs.Program.Dogs

Вот часть кода:

public class Dogs
    {
        public string Name { get; set; }
        public string Classification { get; set; }
        public string Country { get; set; }
        public string Use { get; set; }
    }

    static void Main(string[] args)
    {
        List<Dogs> Dog = new List<Dogs>();

        try
        {
            bool Erreur = false;
            using (StreamReader File = new StreamReader("../../Data/dogs.txt", Encoding.UTF8, true))
            {
                while (!Fichier.EndOfStream)
                {
                    string Line = File.ReadLine();
                    if (!String.IsNullOrWhiteSpace(Line))
                    {
                        string[] Fields = Line.Split('\t');

                        if (Fields.Length == 4)
                        {
                            if (Dogs.IndexOf(Fields[0]) == -1)
                            {
                                Dogs AddDog = new Dogs();
                                AddDog.Name = Fields[0];
                                AddDog.Classification = Fields[1];
                                AddDog.Country = Fields[2];
                                AddDog.Use = Fields[3];
                                Chien.Add(AddDog);
                            }
...

Как я могу проверить атрибут «Имя» объектов, перечисленных в этом списке?

В вашем коде есть некоторые ошибки в именах, и это затрудняет чтение. Например, имя вашего класса — Dogs, а имя вашего списка — Dog.

bolkay 22.05.2019 16:25

Использование Find, Where или FirstOrDefault, как предлагается в предлагаемом дубликате, не имеет особого смысла, когда вы просто хотите определить, содержит ли список определенный элемент. Если вы собираетесь закрыть вопрос как дубликат, выберите вопрос с подходящим ответом.

mm8 22.05.2019 16:34

К сожалению, вы определили свой вопрос как поиск дубликатов в списке, и поэтому он был закрыт, уже имея ответы. Подсказка: Linq, и ваша настоящая проблема заключается в использовании txt-файла, как если бы это была база данных. т.е.: vardogs = File.ReadAllLines("../../Data/dogs.txt", Encoding.UTF8) .Select (f => f.Split('\t')) .Where( f => f .Length == 4) .Select (f => new Dog { Name=f[0], Classification=f[1], Country=f[2], Use=f[3] });

Cetin Basoz 22.05.2019 16:38

Ответ @mm8 с LINQ помог, спасибо ему

Mmeinert 22.05.2019 18:23
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать LINQ, чтобы определить, есть ли объект Dogs с Name, равным Fields[0], в списке Dog:

if (!Dog.Any(x => x.Name == Fields[0]))
{
    Dogs AddDog = new Dogs();
    ...

Я не согласен с downvoter, вы стремились к лучшему решению.

Cetin Basoz 22.05.2019 16:39

Другие вопросы по теме