包含2D集合中的方法

时间:2019-05-14 10:20:21

标签: c# arraylist

如何通过“名称”字段在汽车数组中比较auto [0]? 字符串if (!cars.Contains(auto[0]))当然是错误的。


namespace AutoSqare
{
    class CarsInfo
    {
        static List<Tech> cars = new List<Tech>();
        public class Tech
        {
            public string Name { get; set; }
            public double KM { get; set; }
        }
        static void Main()
        {
            string[] auto = new string[]{"Lada Vesta"};
            cars.Add(new Tech()
            {
                    Name = "Lada Vesta Sport",
                    KM = 190
            });

            if (!cars.Contains(auto[0]))
            cars.Add(new Tech()
            {
                    Name = auto[0],
                    KM = 0
            });

        }
    }
}

2 个答案:

答案 0 :(得分:2)

您可以使用LINQ的Any()方法:

if (!cars.Any(c => c.Name == auto[0]))

但是您似乎计划只拥有唯一个汽车名称,因此使用Dictionary<string,Tech>似乎比List<Tech>更好:

static Dictionary<string, Tech> cars = new Dictionary<string,Tech>();

static void Main()
{
    string[] auto = new string[]{"Lada Vesta"}; // <-- you also had a syntax error here
    Tech tech = new Tech()
        {
            Name = "Lada Vesta Sport",
            KM = 190
        };
    cars.Add(tech.Name, tech);        

    if (!cars.ContainsKey(auto[0]))  // <--- Use ContainsKey here
        cars.Add(auto[0], new Tech()
            {
                Name = auto[0],
                KM = 0
            });
}

答案 1 :(得分:1)

        if (!cars.Any(car => car.Name.Equals(auto[0])))
            cars.Add(new Tech()
            {
                Name = auto[0],
                KM = 0
            });
如果集合中有一个满足条件的元素,则

Any将返回true,条件为car.Name.Equals(auto[0])。这就是为什么您可以使用!cars.Any(car => car.Name.Equals(auto[0]))来查看集合中没有谓词适用的汽车的原因。