当我使用if (moscowCars.Contains(cars[x].Name))
时,它会在一个集合中找到该值,我相信不必再次使用moscowCars.RemoveAt(moscowCars.FindIndex(o => o.Equals(cars[x].Name)));
来查找它,只需:moscowCars.Remove(cars[x].Name);
。当然,我可以使用try & catch
代替if
,但是我只想知道我可以使用Contains
获取商品索引吗?
using System.Collections.Generic;
namespace Autoworld
{
class GoodCars
{
static List<Tech> cars = new List<Tech>();
public class Tech
{
public string Name { get; set; }
public double KM { get; set; }
}
static void Main()
{
List<string> moscowCars = new List<string>
{
"GAZ-330811 Aper", "Lada Vesta Sport"
};
cars.Add(new Tech() { Name = "Lada Vesta Sport", KM = 190 });
for (int x = 0; x < cars.Count; x++)
{
if (moscowCars.Contains(cars[x].Name))
{
moscowCars.RemoveAt(moscowCars.FindIndex(o => o.Equals(cars[x].Name)));
}
}
}
}
}
答案 0 :(得分:2)
您可以完全删除两步过程,而只需使用.Remove
,它将返回:
true
如果已成功删除项目;否则,false
。这个方法 如果在列表中未找到该项目,也会返回false
。
然后看起来像:
for (int x = 0; x < cars.Count; x++)
{
moscowCars.Remove(cars[x].Name);
}
如果您需要处理没有发现要拆除的汽车的情况,则可以将该呼叫包装在if
条件中,例如:
for (int x = 0; x < cars.Count; x++)
{
if (!moscowCars.Remove(cars[x].Name))
{
// Handle no cars to remove
}
}
值得一提的是,.Remove
最终只是在后台获取索引,然后删除该索引处的项目(无论如何,这都是您最初尝试执行的操作):
public bool Remove(T item) {
int index = IndexOf(item);
if (index >= 0) {
RemoveAt(index);
return true;
}
return false;
}
有关来源,请参见here。
或者,如其他人所述,如果您希望列表包含的内容比要删除的项目多,则可以使用.RemoveAll
:
moscowCars.RemoveAll(y => y == cars[x].Name);
同样,要处理什么都没找到的情况:
if (moscowCars.RemoveAll(y => y == cars[x].Name) == 0)
{
// Handle no cars to remove
}
答案 1 :(得分:0)
您确实可以使用IndexOf(item) 这将为您提供项目的索引,如果未找到“ item”,则为-1(也使该方法成为“ contains”的两倍)
答案 2 :(得分:0)
如果您确定没有任何重复的项目,请使用第二种方法。
解决方案
static List<Tech> cars = new List<Tech>();
public class Tech
{
public string Name { get; set; }
public double KM { get; set; }
}
static void Main()
{
List<string> moscowCars = new List<string>
{
"GAZ-330811 Aper", "Lada Vesta Sport"
};
cars.Add(new Tech() { Name = "Lada Vesta Sport", KM = 190 });
for (int x = 0; x < cars.Count; x++)
{
if (moscowCars.Contains(cars[x].Name))
{
moscowCars.RemoveAt(moscowCars.IndexOf(cars[x].Name));
}
}
}
解决方案
static List<Tech> cars = new List<Tech>();
public class Tech
{
public string Name { get; set; }
public double KM { get; set; }
}
static void Main()
{
List<string> moscowCars = new List<string>
{
"GAZ-330811 Aper", "Lada Vesta Sport"
};
cars.Add(new Tech() { Name = "Lada Vesta Sport", KM = 190 });
for (int x = 0; x < cars.Count; x++)
{
if (moscowCars.Contains(cars[x].Name))
{
moscowCars.RemoveAll(o => o == cars[x].Name);
}
}
}
我希望它会有所帮助。