簡體   English   中英

對象引用未設置為實例錯誤

[英]Object reference not set to an instance error

我不知道為什么這種情況持續發生。 我是一個初學者,但對我來說,有一個實例的引用集。 起初我很難讓類具有現在設置為100的數組的大小

這是我的代碼。

Form1.cs

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

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{

    SalesmanClass[] salesmen = new SalesmanClass[100];


    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {

        if (textBox6.Text.Trim().Length != 0)
        {


            for (int i = 0; i <= salesmen.Length; i++)
            {

                if (salesmen[i] == null)
                {
                    salesmen[i].name = textBox6.Text; // error happens here when i enter something into the form it says
                    //Object reference not set to an instance of an object error
                    break;

                }

            }

        }
        else
        {
            MessageBox.Show("Please Input a Name");
        }

    }

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {

    }

    private void button2_Click(object sender, EventArgs e)
    {
        List<string> names = new List<string>();

        for (int i = 0; i < salesmen.Length; i++)//var salesmen in salesmen)
        {
            names.Add(salesmen[i].Name);// same problem here
        }
        listBox1.Items.Add(names);

    }

    private void textBox6_TextChanged(object sender, EventArgs e)
    {

    }

    private void button2_Click_1(object sender, EventArgs e)
    {

    }
}
}

SalesmanClass.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WindowsFormsApplication1
{
public class SalesmanClass
{

    public string name;
    public string cNum;
    public string Email;
    public string address;
    public string gArea;
    public int tSales;

    public SalesmanClass()
    {
        name = null;
        cNum = null;
        Email = null;
        address = null;
        gArea = null;


    }

您在if語句中使用==運算符,這意味着如果推銷員為空,請設置其名稱。 我相信您的意思是如果業務員不為 null( != )。 您還將在for循環中遇到index out of range異常,因此我也在此進行了修復。

for (int i = 0; i < salesmen.Length; i++)
{

    if (salesmen[i] != null)
    {
        salesmen[i].name = textBox6.Text; // error happens here when i enter something into the form it says
        //Object reference not set to an instance of an object error
        break;

    }

}

如果您確實表示該實例為null,則可能需要以下內容:

for (int i = 0; i < salesmen.Length; i++)
{

    if (salesmen[i] == null)
    {
        salesmen[i] = new SalesmanClass();
        salesmen[i].name = textBox6.Text; // error happens here when i enter something into the form it says
        //Object reference not set to an instance of an object error
        break;

    }

}

button2_Click方法中,您遇到相同的問題,因為您沒有跳過null推銷員。 您還可以看到,我評論說我將要訪問的字段從“ Name更改為“ name因為在您發布的課程中,沒有“ Name字段。

private void button2_Click(object sender, EventArgs e)
{
    List<string> names = new List<string>();

    for (int i = 0; i < salesmen.Length; i++)//var salesmen in salesmen)
    {
        if (salesmen[i] != null)
        {
            names.Add(salesmen[i].name); // changed from .Name to .name
        }
    }
    listBox1.Items.Add(names);

}

只需記住,此行不會創建任何新的SalesmanClass對象,只會創建100個類型為SalesmanClass的引用。

SalesmanClass[] salesmen = new SalesmanClass[100];

我想你要:

if (salesmen[i] == null)
{
    salesmen[i] = new SalesmanClass();
    salesmen[i].name = textBox6.Text;
    break;
}

[編輯]蘭德擊敗了我。 我建議您使用List ,而不必擔心“空點”

List<Salesman>() salesmen = new List<Salesman>();

然后將您的for loop代碼替換for loop

if (textBox6.Text.Trim().Length != 0)
{
    salesmen.Add(new Salesmane() { name = textBox6.Text } );
}
else
{
    MessageBox.Show("Please Input a Name");
}

您可以在List<string> names進一步使用它。

您可能必須在屬性上聲明getter和setter:

public string Name { get; set; }

我也將這些屬性名稱命名為CamelCase,因為這是公認的標准。

您需要更新button2_click以使用Count而不是Length或使用foreach循環:

foreach (Salesman salesman in salesmen)
{
names.Add(salesman.Name);
}

您還可以使用LINQ進行簡化,這完全相同:

List<string> names = salesmen.Select(s => s.Name).ToList();

如果發生對象引用錯誤,請檢查變量u pass是否正確匹配正確的索引,例如:如果使用的是Grid,請檢查變量u是否正確指向網格的索引。

int StudID = 
Convert.ToInt32(editableItem.OwnerTableView.DataKeyValues[editableItem.ItemIndex]
["StudID"].ToString());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM