0
List<Gedi.Models.OperacoesModel.allIndex> indicesAndValues = indicesAndValuesIE.ToList();
List<Gedi.Models.OperacoesModel.allIndex> indicesAndValuesToExclude = new List<Gedi.Models.OperacoesModel.allIndex>();

foreach (Gedi.Models.OperacoesModel.allIndex indiceValue in indicesAndValues)
{
   if (indiceValue.value == "")
   {
      indicesAndValuesToExclude.Add(indiceValue);           
   }
}

int idd;
foreach (Gedi.Models.OperacoesModel.allIndex removeObj in indicesAndValuesToExclude)
{
idd = indicesAndValues.FindIndex(removeObj);
}

根据上面的代码,

idd = indicesAndValues.FindIndex(removeObj);

我想检索此 List 中具有元素 removeObj 的索引;

我收到一条错误消息,指出 FindIndex 有一些无效参数。

removeObj 和 indicesAndValues 的类型相同,只是 indicesAndValues 是一个 List 而 removeObj 只是一个相同类型的对象

为什么我不能使用 removeObj 作为条件的谓词?

4

4 回答 4

1

FindIndex需要一个谓词作为参数。您可以使用 lambda 表达式来指定谓词

idd = indicesAndValues.FindIndex(item => item == removeObj);

您将在更复杂的场景中使用它,例如

idd = indicesAndValues.FindIndex(item => item.Name == "abc");

(这将找到名称为“abc”的第一项的索引。)

List<T>有另一种IndexOf可用于查找对象的方法

idd = indicesAndValues.IndexOf(removeObj);
于 2012-12-21T15:58:17.860 回答
0

您需要将谓词传递给FindIndex.

idd = indicesAndValues.FindIndex(o => o == removeObj);

更好的选择是使用:

idd = indicesAndValues.IndexOf(removeObj);

最后,如果您不需要知道删除了哪些值,您可以将整个代码重写为:

indicesAndValues.RemoveAll(obj => obj.Value == "");
于 2012-12-21T15:56:19.570 回答
0

请改用IndexOfFindIndex采用谓词,而不是直接对象。如果你只想找到一个对象,IndexOf是一种更简单的方法。

于 2012-12-21T15:56:47.030 回答
0

尝试这个:

idd = indicesAndValues.FindIndex(o => o == removeObj);
于 2012-12-21T15:57:30.470 回答