C# - последовательность не содержит элементов (скрин)

nail2501

Client
Регистрация
19.04.2015
Сообщения
483
Благодарностей
38
Баллы
28
Есть список tags_list
Пытаюсь определить наличие в списке строки, состоящей из переменных: tag + "~~~" + attrname + "~~~" + attrvalue)

C#:
tag = he.GetAttribute("fulltagname");
attrname = "id";
attrvalue = he.GetAttribute("id");
temp_s = tags_list.Where(x => x.Contains(tag + "~~~" + attrname + "~~~" + attrvalue)).First(); //проверка наличия строки в TAGS
return temp_s;
Выдает вот это (скрин)
Нужна помощь ... )
Возможно что проблема в этом участке?
Если да то как это обойти?

Получается что если нет совпадений то данная конструкция выдает ошибку?
Как ее правильно написать?
 

Вложения

Последнее редактирование:
Регистрация
05.06.2019
Сообщения
570
Благодарностей
454
Баллы
63
1) if (!he.IsVoid)

2) FirstOrDefault
 
  • Спасибо
Реакции: Yuriy Zymlex и nail2501

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
1) if (!he.IsVoid)

2) FirstOrDefault
3) Материализовать коллекцию, сосчитать количество результатов, получить первый - иначе пусто :-)

C#:
tag = he.GetAttribute("fulltagname");
attrname = "id";
attrvalue = he.GetAttribute("id");
temp_s = tags_list.Where(x => x.Contains(tag + "~~~" + attrname + "~~~" + attrvalue)).First(); //проверка наличия строки в TAGS
return temp_s;
Может так сработает?
C#:
tag = he.GetAttribute("fulltagname");
attrname = "id";
attrvalue = he.GetAttribute("id");
var list = tags_list.Where(x => x.Contains(string.Join("~~~", new[]{tag,attrname,attrvalue})).ToList(); //проверка наличия строки в TAGS
temp_s = list.Count > 0 ? list[0] : string.Empty;
return temp_s;
 
  • Спасибо
Реакции: Yuriy Zymlex и nail2501

nail2501

Client
Регистрация
19.04.2015
Сообщения
483
Благодарностей
38
Баллы
28
3) Материализовать коллекцию, сосчитать количество результатов, получить первый - иначе пусто :-)


Может так сработает?
C#:
tag = he.GetAttribute("fulltagname");
attrname = "id";
attrvalue = he.GetAttribute("id");
var list = tags_list.Where(x => x.Contains(string.Join("~~~", new[]{tag,attrname,attrvalue})).ToList(); //проверка наличия строки в TAGS
temp_s = list.Count > 0 ? list[0] : string.Empty;
return temp_s;
temp_s = temp_list.Where(x => x.Contains("бла-бла-бла")).FirstOrDefault();
привет.
а как удалить данную строку из списка, которую я нашел таким способом?
номер строки то я не знаю чтобы использовать например ... RemoveAt(i);
спасибо.
 

nail2501

Client
Регистрация
19.04.2015
Сообщения
483
Благодарностей
38
Баллы
28

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 787
Благодарностей
2 453
Баллы
113
temp_s = temp_list.Where(x => x.Contains("бла-бла-бла")).FirstOrDefault();
привет.
а как удалить данную строку из списка, которую я нашел таким способом?
номер строки то я не знаю чтобы использовать например ... RemoveAt(i);
спасибо.
Правильно, если Вы нашли строку таким образом, то Вы не можете удалить её по индексу.
Прежде нужно найти индекс, а потом уже удалить.
Пример:
C#:
List<string> temp_list = new List<string>();
temp_list.Add("бла-бла-бла");
temp_list.Add("бла-бла-бла");

string temp_s = temp_list.Where(x => x.Contains("бла-бла-бла")).FirstOrDefault();
int num = -1;
for(int i=0;i<temp_list.Count;i++) {
    if(temp_list[i] == temp_s) {
        num = i;
        break;
    }
}

if(num >= 0) {
    temp_list.RemoveAt(num);
}
Но, могут быть разные тонкости Default если строки нет будет string.Empty - а значит, возможно стоит проверять, если строка temp_s пустая - тогда ничего удалять не нужно...
 

nail2501

Client
Регистрация
19.04.2015
Сообщения
483
Благодарностей
38
Баллы
28
Правильно, если Вы нашли строку таким образом, то Вы не можете удалить её по индексу.
Прежде нужно найти индекс, а потом уже удалить.
Пример:
C#:
List<string> temp_list = new List<string>();
temp_list.Add("бла-бла-бла");
temp_list.Add("бла-бла-бла");

string temp_s = temp_list.Where(x => x.Contains("бла-бла-бла")).FirstOrDefault();
int num = -1;
for(int i=0;i<temp_list.Count;i++) {
    if(temp_list[i] == temp_s) {
        num = i;
        break;
    }
}

if(num >= 0) {
    temp_list.RemoveAt(num);
}
Но, могут быть разные тонкости Default если строки нет будет string.Empty - а значит, возможно стоит проверять, если строка temp_s пустая - тогда ничего удалять не нужно...
ну я думал может есть удаление не только по индексу.
спасибо.
может как то можно пристроить ф-цию удаления к той конструкции )
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)