Мне нужно проверить, содержит ли первый столбец в DataGridView значение 10
Правильный инструмент (метод) для задания будет .Any
, который возвращает true
, если какой-либо элемент изколлекция удовлетворяет заданному условию, или false, если нет, или коллекция пуста.
if (dgv.Rows.Cast<DataGridViewRow>().Any(r => r.Cells[0].Value.Equals(10)))
{
// exists
}
else
{
// not exist
}
Если вам действительно нужно значение индекса, используйте метод .DefaultIfEmpty
для возврата значения по умолчанию для случая, когда коллекция пуста илитребуемое значение не найдено.
var index = dgv.Rows.Cast<DataGridViewRow>()
.Where(r => r.Cells[0].Value.Equals(10))
.Select(r => r.Index)
.DefaultIfEmpty(-1)
.First();
С помощью .DefaultIfEmpty
вы можете «сообщить» читателям вашего кода свое действительное намерение без дополнительных условий или нулевых пропагаторов.
И поскольку вы предоставляете значение по умолчанию в случае пустой коллекциивернувшись, вы можете безопасно использовать метод .First()
, потому что всегда будет возвращен хотя бы один элемент.
Для поиска всех вхождений данного значения не используйте First
или FirstOrDefault
.