如何在ICollection <t>中获取项目的索引

时间:2017-11-15 15:13:15

标签: c# linq c#-4.0 collections indexer

我有这个车辆列表

ICollection<Cars> Cars

我也有一个车对象,我知道在ICollection中如何获得列表中汽车的索引/位置?我需要将它添加到字符串列表

这是我到目前为止所做的:

var index = cars.Where(b=> b.Id == car.id).Single().iWantTheIndex
stringList.Add(index)

有什么想法吗?

2 个答案:

答案 0 :(得分:8)

如果您想使用索引集合,则应使用IList<T>,而不是ICollection<T>ICollection<T>是您可以枚举,添加和删除项目以及获取所有项目的内容。 IList<T>是一个集合,其中的项目按指定顺序排列,可以根据它们在列表中的位置进行访问。

因为ICollection<T>并不一定代表有序集合,所以你无法获得有意义的&#34;索引&#34;一件物品。项目不一定拥有职位。

答案 1 :(得分:0)

这将为您提供当前迭代的索引:

var index = cars.Select((c, i) => new{ Index = i, Car = c })
                .Where(item => item.Car.Id == car.id)
                .Single()
                .Index;

stringList.Add(index);

请注意, next 迭代可能有不同的顺序(取决于ICollection<>的实际实现)并且可能会导致完全不同的索引,因此请小心使用这个索引。