0

我需要使用 Linq 方法在不使用循环的情况下使用 TValue 列表查找特定项目的索引。我试图通过将单个 TValue 与 Tvalue 的 IEnumerable 集合进行比较来查找索引,如下面的代码

 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;

在这里,列表是包含 5 个项目的 TValue 的集合,而项目是具有单个项目的 TValue,其索引将在列表中找到。在下图中找到结构

在此处输入图像描述

请建议一种通过比较两个 TValue 来查找索引的方法

问候,

克尔塔娜。

4

2 回答 2

0

你可以试试这个代码

int idx= list.Select((elem, index) => new { elem, index }).First(p => EqualityComparer.Default.Equals(p.elem item).index

于 2020-06-29T11:05:59.763 回答
-1

不是所有的东西都可以直接比较。例如

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;
于 2020-06-29T09:24:38.137 回答