首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >抛出的NullReferenceException

抛出的NullReferenceException
EN

Stack Overflow用户
提问于 2013-12-09 17:22:11
回答 6查看 116关注 0票数 0

我是C#.NET的初学者,我们的任务是创建一个在线银行系统,其中交易和登录数据存储在一个类的数组中。虽然我慢慢地掌握了整个类数组的概念,但我似乎无法将登录数据保存到类的数组中。下面是我的程序:

代码语言:javascript
复制
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;
using BankTransaction;

namespace LabExam1
{
    public partial class Registration : Form
    {
        Transactions trans = new Transactions();
        int number = 10000;
        int x = 0;
        const int size = 100;
        Transactions[] loginData = new Transactions[size];

        public void saveLoginData()
        {
            loginData[x].Username = trans.createUserName(txtFname.Text, txtLname.Text, txtMi.Text);
            loginData[x].Password = txtPass.Text;
            x++;
        }

        public Registration()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            cboType.SelectedIndex = 0;
        }

        private void btnRegister_Click(object sender, EventArgs e)
        {
            if (txtFname.Text == "" || txtLname.Text == ""|| txtMi.Text == "" || txtPass.Text == "")
            {
                MessageBox.Show("Please fill up all required fields!", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                if (cboType.SelectedIndex == 0)
                {
                    number++;
                    loginData[x] = new Transactions();
                    saveLoginData();
                    MessageBox.Show("Generated Username: " + loginData[x].Username + number + "\n" + "Please do not share this Information to anyone!");

                    this.Hide();
                    Transaction tr = new Transaction();
                    tr.ShowDialog();
                }

                if (cboType.SelectedIndex == 1)
                {
                    if (nudDeposit.Value < 2500.00m)
                    {
                        MessageBox.Show("The initial deposit for your account type is insufficient", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }

                    else
                    {
                        number++;
                        loginData[x] = new Transactions();
                        saveLoginData();
                        MessageBox.Show("Generated Username: " + loginData[x].Username + number + "\n" + "Please do not share this Information to anyone!");

                        this.Hide();
                        Transaction tr = new Transaction();
                        tr.ShowDialog();
                    }
                }

                if (cboType.SelectedIndex == 2)
                {
                    if (nudDeposit.Value < 3000.00m)
                    {
                        MessageBox.Show("The initial deposit for your account type is insufficient", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }

                    else
                    {
                        number++;
                        loginData[x] = new Transactions();
                        saveLoginData();
                        MessageBox.Show("Generated Username: " + loginData[x].Username + number + "\n" + "Please do not share this Information to anyone!");

                        this.Hide();
                        Transaction tr = new Transaction();
                        tr.ShowDialog();
                    }
                }
            }      
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}

我在这部分得到了一个错误,它抛出了nullReferenceException

MessageBox.Show("Generated Username: " + loginData[x].Username + number + "\n" + "Please do not share this Information to anyone!");

下面是我的类定义:

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BankTransaction
{
    public class Transactions
    {
        String username, password;

        #region forArrayOfClassLogin

        public String Password
        {
            get { return password; }
            set { password = value; }
        }

        public String Username
        {
            get { return username; }
            set { username = value; }
        }

        #endregion

        public String createUserName(String fname, String lname, String mi)
        {
            String firstString = fname[0].ToString();
            String secondString = mi[0].ToString();
            String thirdString = lname[0].ToString();

            String uname = firstString + secondString + thirdString;
            return uname;
        }

        public void setBalance(String type, decimal initialBalance)
        {

        }

        public String getUserName()
        {
            return username;
        }

        public String setPassword(String pass)
        {
            return password = pass;
        }

        public String getPassword()
        {
            return password;
        }
    }
}

任何帮助都将不胜感激。提前谢谢。

EN

回答 6

Stack Overflow用户

发布于 2013-12-09 17:28:35

您需要使用loginData[x -1],因为您已经在saveLoginData()中增加了x的值

代码语言:javascript
复制
MessageBox.Show("Generated Username: " + loginData[x -1].Username + number + "\n" + "Please do not share this Information to anyone!");
票数 1
EN

Stack Overflow用户

发布于 2013-12-09 17:28:58

这个问题似乎出现在函数saveLoginData()的"x++;“行中。

使用X=0将X声明为成员级变量。

当你在"saveLoginData()“函数中增加x的值时,它变成了X=1,然后在尝试访问父函数中的数组时,X的值现在是1,但是你的数组没有为该索引存储任何值,这导致了异常。

票数 1
EN

Stack Overflow用户

发布于 2013-12-09 17:25:58

代码语言:javascript
复制
String firstString = fname[0].ToString();
String secondString = mi[0].ToString();
String thirdString = lname[0].ToString();

安装上面的行尝试做

代码语言:javascript
复制
String firstString = fname;
String secondString = mi;
String thirdString = lname;

有关更多详细信息,请参阅以下链接。http://msdn.microsoft.com/en-us/library/ms228362.aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20467090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档