FindIndex()方法将对象拒绝为谓词

时间:2012-12-21 15:53:19

标签: c# asp.net .net asp.net-mvc

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 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

idd = indicesAndValues.IndexOf(removeObj);

答案 1 :(得分:0)

您需要将谓词传递给FindIndex

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

更好的选择是使用:

idd = indicesAndValues.IndexOf(removeObj);

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

indicesAndValues.RemoveAll(obj => obj.Value == "");

答案 2 :(得分:0)

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

答案 3 :(得分:0)

试试这个:

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