'System.Array'不包含'容量'的定义 - C#

时间:2018-05-18 17:04:53

标签: c#

有人可以帮我解决2个错误吗?

类Car 中显示:

  1. this.persons = new Person [initialColor]; - “无法将类型'string'隐式转换为'int'”。

  2. for(int j = 0; j< persons.Capacity; j ++) - 'System.Array'不包含'Capacity'的定义,也没有扩展方法 '容量'接受'System.Array'类型的第一个参数可以 找到(你错过了使用指令或程序集 引用?)

  3. 为什么没有问题: for(int i = 0; i< cars.Length; i ++)?但是 .Capacity 存在问题。我可以用什么而不是容量?

    使用System;

    public class Program
        {   
            public static void Main()
            {
                Car blueCar = new Car("blue");
                Garage smallGarage = new Garage(2); 
                Person relativePerson = new Person("relative");
    
    
                smallGarage.ParkCar(blueCar, 0);
                Console.WriteLine(smallGarage.Cars);
    
                blueCar.SitPerson(relativePerson, 0);
                Console.WriteLine(blueCar.Persons);
            }
        }
    
    
        class Car
        {
            private Person[] persons;
    
            public Car(string initialColor)
            {
                Color = initialColor;
                this.persons = new Person[initialColor];
            }
    
            public string Color { get; private set; }
    
            public void SitPerson (Person person, int seat)
            {
                persons[seat] = person;
            }
            public string Persons
            {
                get
                {
                    for(int j = 0; j < persons.Capacity; j++)
                    {
                        if (persons[j] != null)
                        {
                            Console.WriteLine(String.Format("The {0} is in a {1} car.", persons[j].Type, j));
                        }
                    }
                    return "That's it.";
                }
            }
        }
    
    
        class Garage
        {
            private Car[] cars;
    
            public Garage(int initialSize)
            {
                Size = initialSize;
                this.cars = new Car[initialSize];
            }
    
            public int Size { get; private set; }
    
            public void ParkCar (Car car, int spot)
            {
                cars[spot] = car;
            }
    
            public string Cars 
            {
                get 
                {
                    for (int i = 0; i < cars.Length; i++)
                    {
                        if (cars[i] != null)    
                        {
                            Console.WriteLine(String.Format("The {0} car is in spot {1}.", cars[i].Color, i));
                        }
                    }
                    return "That's all!";
                }
            }
        }
    
    
        class Person
        {
            public Person(string initialType)
            {
                Type = initialType;
            }
            public string Type { get; private set; }
        }
    }
    

1 个答案:

答案 0 :(得分:1)

Capacity因为它适用于可扩展集合,例如List<T>.Capacity,它指的是底层数组的大小;但是,在C#中,数组是固定宽度的,因此数组的容量和长度之间没有概念上的区别。

在幕后,List<T>会根据需要将元素复制到更大,更大的数组中,因此Capacity几乎只需用于诊断目的。

至于尝试通过new Person[initialColor]进行初始化,您使用了错误的括号:[]用于数组并在数组中查找项目,()用于方法调用(在这种情况下,new Person(initialColor)正在Person)上调用构造函数。