У меня есть файл данных, заполненный строками 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);
}
...
Как я могу проверить атрибут «Имя» объектов, перечисленных в этом списке?
Использование Find
, Where
или FirstOrDefault
, как предлагается в предлагаемом дубликате, не имеет особого смысла, когда вы просто хотите определить, содержит ли список определенный элемент. Если вы собираетесь закрыть вопрос как дубликат, выберите вопрос с подходящим ответом.
К сожалению, вы определили свой вопрос как поиск дубликатов в списке, и поэтому он был закрыт, уже имея ответы. Подсказка: 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] });
Ответ @mm8 с LINQ помог, спасибо ему
Вы можете использовать LINQ, чтобы определить, есть ли объект Dogs
с Name
, равным Fields[0]
, в списке Dog
:
if (!Dog.Any(x => x.Name == Fields[0]))
{
Dogs AddDog = new Dogs();
...
Я не согласен с downvoter, вы стремились к лучшему решению.
В вашем коде есть некоторые ошибки в именах, и это затрудняет чтение. Например, имя вашего класса —
Dogs
, а имя вашего списка —Dog
.