【问题标题】:C# Array of objects, can't set values [duplicate]C#对象数组,不能设置值[重复]
【发布时间】:2015-02-02 12:54:33
【问题描述】:
class City
{
    string name;

    public string getName()
    {
        return name;
    }

    public void setName(String value)
    {
        name = value;
    }
}

static void Main(string[] args)
{
    City[] arr = new City[1];
    arr[0].setName("New York");
}

问题是我得到“System.NullReferenceException”,“对象引用未设置为对象的实例。”在我将名称设置为纽约的那一行。如果我这样做:

City city = new City();
city.setName("New York");

我没有收到任何错误,但我想使用数组,因为我将添加更多对象。这在 C# 中是否可行,因为它在 C++ 中?是声明 5 个对象、设置它们的名称然后创建一个数组并将它们放入其中的唯一方法吗?

【问题讨论】:

  • 你定义了数组,但你也必须初始化对象
  • 对于副本,请参阅ArrayArray Elements 部分。
  • 附带说明,您应该考虑使用 Name property 而不是 getNamesetName 方法。

标签: c# arrays oop object


【解决方案1】:

您正在创建一个空数组。您必须在分配对象之前对其进行初始化:

City[] arr = new City[1];
arr[0] = new City();
arr[0].setName("New York");

【讨论】:

  • 谢谢。猜猜这是某种节省内存的方式,除非我实际声明和使用它们,否则不要声明所有对象。
  • @user2765257 这是因为有时您想放入数组的类中不存在空构造函数。这就是你必须手动调用它的原因。
【解决方案2】:

这一行只创建了一个包含一个元素的数组。

City[] arr = new City[1];

元素为空。

你需要给它赋值

arr[0] = new City();

然后你就可以访问它了。

arr[0].setName("New York");

【讨论】:

    猜你喜欢
    • 2021-10-21
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多