调用对象数组时出现Null引用异常 [英] Null Reference Exception when calling an Object Array

查看:78
本文介绍了调用对象数组时出现Null引用异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图尽早获得一些帮助,尽管我很欣赏所有建议,但我认为我没有提供足够的信息.

I tried to get some help earlier and I don't think I provided enough information though I appreciate all the advice.

目标只是将对象室的新实例添加到阵列并打印到列表框.当用户尝试输入已经存在的房间名称时,应仅在阵列中已经存在的房间的规格中显示.

The goal is simply to add a new instance of the Object Room to an array and print to a list box. When a user attempts to enter a room name that is already in existence it should simply display in the specs for the room that is already in the array.

我不断收到null引用异常.

I keep getting a null reference exception.

这是我的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


namespace Room_Class
{
    public partial class Form1 : Form
    {
        Room[] roomArray = new Room[20];
        int count = 0;

        public Form1()
        {
            InitializeComponent();
        }

        private void btnAddRm_Click(object sender, EventArgs e)
        {
            double length, width, height;
            if (VerifyRoomName() == true)
            {


                if (txtRmLen.Text == "" || txtRmWid.Text == "" || txtRmHt.Text == "")
                {
                    for (int i = 0; i < roomArray.Length; i++)
                    {
                        if (txtRmName.Text == roomArray[i].getRoomName())
                        {
                            txtRmName.Text = roomArray[i].getRoomName();
                            txtRmLen.Text = roomArray[i].getLength().ToString();
                            txtRmHt.Text = roomArray[i].getCeilingHeight().ToString();
                            txtRmWid.Text = roomArray[i].getWidth().ToString();
                        }
                        else
                        {
                            roomArray[count] = new Room(roomName);
                            count++;
                        }
                    }
                }
                else
                {
                    try
                    {
                        length = double.Parse(txtRmLen.Text);
                        width = double.Parse(txtRmWid.Text);
                        height = double.Parse(txtRmHt.Text);
                        for (int i = 0; i < roomArray.Length; i++)
                        {
                            if (txtRmName.Text == roomArray[i].getRoomName())
                            {
                                txtRmName.Text = roomArray[i].getRoomName();
                                txtRmLen.Text = roomArray[i].getLength().ToString();
                                txtRmHt.Text = roomArray[i].getCeilingHeight().ToString();
                                txtRmWid.Text = roomArray[i].getWidth().ToString();
                            }
                            else
                            {
                                roomArray[count] = new Room(roomName, length, width, height);
                                count++;
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message + "\n\nPlease Enter Valid Values", "Error!");
                    }
                }  
                PrintList();
            }

        }


        private void PrintList()
        {
            double paintTotal = 0, feetTotal = 0;
            string RoomName;
            lstRoomList.Items.Clear();
            for (int i = 0; i < count; i++)
            {
                RoomName = roomArray[i].getRoomName() + "\t" + roomArray[i].SquareFeet().ToString("n1") + "\t" + roomArray[i].GallonsPaint().ToString("n1");
                lstRoomList.Items.Add(RoomName);
                paintTotal += roomArray[i].GallonsPaint();
                feetTotal += roomArray[i].SquareFeet();
                lblTtlGallons.Text = paintTotal.ToString("n1");
                lblTtlSqFt.Text = feetTotal.ToString("n1");
            }
        }

        private bool VerifyRoomName()
        {
            if (roomName == "")
            {
                MessageBox.Show("Please Enter a Room Name", "Error!");
                return false;
            }
            else
                return true;
        }
    }
}

推荐答案

您的代码应为

if (roomArray[i] != null)

无论何时创建数组,都必须先对其进行初始化,然后才能访问它们.

Whenever you create an array, you'll have to initialize it's individual items before you can access them.

Room[] roomArray = new Room[20];

roomArray[0] = new Room();

这篇关于调用对象数组时出现Null引用异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆