Оператор '==' нельзя применять к операндам типа TValue и TValue
Мне нужно найти индекс определенного элемента в списке TValue с помощью методов Linq без использования цикла. Я попытался найти индекс, сравнив одно TValue с коллекцией IEnumerable Tvalue, как показано ниже.
int idx= list.Select((elem, index) => new { elem, index }).First(p => p.elem == item).index;
При этом я получаю следующую ошибку
CS0019 Оператор '==' не может применяться к операндам типа 'TValue' и 'TValue'
Я также пробовал использовать Equals с этим кодом, но он тоже не возвращает точное значение индекса.
int idx= list.Select((elem, index) => new { elem, index }).First(p => p.elem.Equals(item)).index;
Здесь список представляет собой набор TValue с 5 элементами, а item - это TValue с одним элементом, индекс которого должен быть найден в списке. Найдите структуру на изображении ниже
Предложите способ найти индекс, сравнив TValue
С Уважением,
Киртана.
2 ответа
Вы можете попробовать этот код
int idx= list.Select((elem, index) => new { elem, index }).First(p => EqualityComparer.Default.Equals(элемент p.elem).index
Не все можно сравнивать напрямую. Например
var item1 = new KeyValuePair<int, string>(1, "text");
var item2 = new KeyValuePair<int, string>(1, "text");
var theSame = (item1 == item2);
даст ошибку
CS0019 Operator '==' cannot be applied to operands of type 'KeyValuePair<int, string>' and 'KeyValuePair<int, string>'
Итак, если вы не можете сравнить одно TValue с другим, вам может потребоваться сравнить каждый элемент индивидуально, т.е.
int idx= list.Select((elem, index) => new { elem, index })
.First(p => p.elem.Id == item.Id && p.elem.Text == item.Text).index;