从另一个列表中的字符串获取列表的索引

时间:2013-07-08 14:03:40

标签: c# list indexing

我有两个清单:

public static List<Dinosaur> Dinosaurs = new List<Dinosaur>();
public static List<DinosaurSpecies> DinosaurSpeciesList = new List<DinosaurSpecies>();

我想使用第一个列表中的Species在第二个列表中查找Species的键。以下引发了'有一些无效的参数'但它确实说明了我正在尝试做的事情:

int index = MainWindow.DinosaurSpeciesList.FindIndex(MainWindow.Dinosaurs[i].Specie);

换句话说,恐龙列表中的物种[索引]出现在所有DinosaurSpecies的列表中?

2 个答案:

答案 0 :(得分:3)

您可以通过将predicate传递给FindIndex方法来执行此操作:

int index = MainWindow.DinosaurSpeciesList.FindIndex(x => x.Specie == MainWindow.Dinosaurs[i].Specie);

基本上,您要说的是:找到Specie属性等于指定Dinosaur.Specie属性的元素的索引


一个简化且更易理解的例子可能是:

Dinosaur dinosaur = GetDinosaurToFindSpeciesInformationFor();
int index = DinosaurSpeciesList.FindIndex(x => x.Specie == dinosaur.Specie);

当然,如果您计划仅使用索引来获取DinosaurSpecies对象,您可以这样做:

DinosaurSpecies species = DinosaurSpeciesList.SingleOrDefault(x => x.Specie == dinosaur.Specie);
//NOTE: species will be null if there are no matches, or more than one match

答案 1 :(得分:2)

FindIndex的参数错误。单参数形式需要lambda(或更具体地,Predicate<T>):

int index = MainWindow.DinosaurSpeciesList.FindIndex(x => x.Specie.Equals(MainWindow.Dinosaurs[i].Specie));

当然,取决于DinosaurSpecies课程的样子。

PS。我喜欢恐龙