#c# #linq
#c# #linq
Вопрос:
У меня есть сторонняя сетка, я использую LINQ для проверки всех строк в ней ( GetRows()
) — для проверки того, что конкретная ячейка ( _ObjectKey
) не содержит значения. Я хочу использовать Any
для этого метод LINQ.
Но мое утверждение всегда возвращается false
, даже если sentGrid
оно содержит значение. Какие-либо очевидные ошибки?
if (sentGrid.GetRows().Any(r => r.Cells[_ObjectKey].Value == theValue) == false)
Комментарии:
1. Я теряюсь со всеми негативами здесь, и я подозреваю, что они не особенно полезны. Я предлагаю вам изменить свой вопрос на:
bool any = sentGrid.GetRows().Any(r => r.Cells[_ObjectKey].Value == theValue);
, объясните ожидаемое значение и фактическое значение, а затем расскажите нам о типах всех задействованных значений. В частности, какой типr.Cells[_ObjectKey].Value
и какой типtheValue
? Возможно, вы должны использоватьObject.Equals(r.Cells[_ObjectKey].Value, theValue)
вместо этого?2. Вы пробовали Equals вместо == ?
3. как насчет
sentGrid.GetRows().All(r => r.Cells[_ObjectKey].Value != theValue)
? Это сработает для вас?4. «Какие-нибудь очевидные ошибки?» Не то, что я вижу. Попробуйте написать для нас полный пример : я ожидаю, что вы сами найдете проблему в этом процессе.
5. Я бы рекомендовал
sentGrid.GetRows()
временно сохранить в отдельной переменной, чтобы вы могли проверять значения в отладчике. Или еще лучше, что-то вроде,var values = sentGrid.GetRows().Select(r => r.Cells[_ObjectKey].Value).ToList();
. Таким образом, вы можете хотя бы увидеть, что вы сравниваете.
Ответ №1:
Эта проблема возникла из-за сравнения двух типов объектов с использованием == вместо .Equals .
Окончательный код:
// Add items to target grid if they're not already there
if(!sentGrid.GetRows().Any(r => r.Cells[_ObjectKey].Value.Equals(theValue)))
{
sentGrid.AddItem(theValue);
}