Оператор '==' нельзя применять к операндам типа 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;
Другие вопросы по тегам