2012-12-21 13 views
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); 
} 

基於上述代碼,FindIndex()方法拒絕對象作爲謂詞

idd = indicesAndValues.FindIndex(removeObj); 

我想要檢索的名單具有元件removeObj的索引;

我得到一個錯誤,說FindIndex有一些無效的參數。

removeObj和indicesAndValues是同一類型的不同之處在於indicesAndValues是列表,removeObj只是同類型

爲什麼我不能夠使用removeObj作爲條件的謂詞的對象?

回答

0

您需要將謂詞傳遞給FindIndex

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

一個更好的選擇是使用:

idd = indicesAndValues.IndexOf(removeObj); 

最後,如果你不需要知道被拆除其值,你可以重寫你的整個代碼:

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

謝謝...投票給你 – Augusta

0

改爲使用IndexOfFindIndex需要一個謂詞,而不是一個直接的對象。如果你只想找到一個對象,IndexOf是一個更簡單的方法。

0

試試這個:

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

FindIndex需要一個謂語參數。您可以使用lambda表達式,以指定謂詞

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

你可以使用它在更復雜的場景,如

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

(這會發現有一個名字的第一個項目的索引「 ABC」)。

List<T>有另一種方法IndexOf,你可以用它來找到一個對象

idd = indicesAndValues.IndexOf(removeObj);