Dayz последовательность не содержит соответствующий элемент

Обновлено: 02.07.2024

Что ж, я ожидал, что именно эта строка выбрасывает исключение:

First() вызовет исключение если он не может найти ни одного подходящего элемента. Учитывая, что вы проверяете значение null сразу после этого, похоже, что вы хотите FirstOrDefault() , который возвращает значение по умолчанию для типа элемента (которое имеет значение NULL для ссылочных типов), если соответствующие элементы не найдены:

В некоторых ситуациях следует учитывать и другие варианты: Single() (если вы считаете, что есть ровно один соответствующий элемент) и SingleOrDefault() (если вы считаете, что совпадают ровно один или ноль элементов). Я подозреваю, что FirstOrDefault - лучший вариант в данном конкретном случае, но в любом случае стоит знать о других.

С другой стороны, похоже, что вам может быть лучше с объединением здесь в первую очередь. Если вам было все равно, что он будет выполнять все совпадения (а не только первое), вы можете использовать:

Это проще и ИМО.

Даже если вы действительно решите сохранить цикл, у меня есть несколько предложений:

    Избавьтесь от внешнего if . Вам это не нужно, так как если Count равен нулю, тело цикла for никогда не выполнится.

Исключите общие подвыражения:

По возможности используйте foreach вместо for для начала:

Возможно, использование Where () перед First () может вам помочь, поскольку в этом случае моя проблема была решена.

Для тех из вас, кто столкнулся с этой проблемой при создании контроллера через контекстное меню, повторное открытие Visual Studio от имени администратора исправило ее.

Из библиотеки MSDN:

Метод First<TSource>(IEnumerable<TSource>) вызывает исключение, если источник не содержит элементов. Чтобы вместо этого вернуть значение по умолчанию, когда исходная последовательность пуста, используйте метод FirstOrDefault .

Используйте FirstOrDefault . First никогда не вернет null - если он не может найти соответствующий элемент, он выбрасывает исключение, которое вы видите.

Каждый из листов точно содержит данные, которые отвечают условию.


49.4k 149 149 золотых знаков 54 54 серебряных знака 211 211 бронзовых знаков x.First() пытается получать первый элемент последовательности, если последовательность пустая- вызывает исключение. Можно сделать вывод что при заданном предикате у вас нет значений. Как проверялось, что Каждый из листов точно содержит данные, которые отвечают условию? что значит "каждый из листов содержит данные, которые отвечают условию"? вы же одну и ту же коллекцию modelg.Gate каждый раз фильтруете

Вместо First() и Where() используйте FirstOrDefault() с постпроверкой на нулл

UPD: код можно дальше модифицировать, чтобы исключить повторную фильтрацию:

При получении данных возникает ошибка "Последовательность содержит более одного соответствующего элемента". Подскажите, пожалуйста, в чем ошибка?


49.4k 72 72 золотых знака 248 248 серебряных знаков 477 477 бронзовых знаков а уверены, что используется FirstOrDefault а не SingleOrDefault ? Ошибки не возникает, если сделать так: public class KPI_Target: Reference < [Column("Section1")] public string State < get; set; >Сдается, что ошибка в наследовании у меня нечто подобное было, когда в таблице в бд было несколько записей с одинаковым внешним ключем, хотя связь была 1 к 1. может быть дело в этом. Я тогда удалил одну запись и все пофиксилось. Попробуй проверить это.

Странное у вас наследование. Вообще-то, в контексте не должно быть наборов (DbSet) для ребенка и родителя одновременно!

Я так понимаю, ваш BaseClass - это просто контейнер для ID, в базе отдельная таблица ему не нужна. Поэтому вам в контексте надо завести ровно 1 набор сущностей:

В таком случае, к организациям можно будет обратиться через OfType:

Или же можно найти по ID любой Reference, а потом уже привести его к Organisation (но тогда запрос будет медленнее, потому что EF будет проверять все варианты возможных наследников):


55.2k 7 7 золотых знаков 62 62 серебряных знака 134 134 бронзовых знака

DayZ Standalone | ONWARD

Распространённые ошибки при заходе на сервер и их решение :

1. Некорректная версия игры.

2. Вас изгнали из игры( Client contains PBO which. )

В этом случае рекомендуем в параметрах лаунчера проверить актуальность введённого вами ранее айпи сервера,возможно он изменился.
Актуальный айпи сервера ВСЕГДА находится в статусе группы(в самом верху).

3. Connection failed.

Рекомендуем проверить айпи сервера,указанный в параметрах лаунчера.Возможно,он введён некорректно.

Читайте также: