在为对象数组中的对象赋值时出现空引用异常
本文关键字:对象 引用 异常 赋值 数组 | 更新日期: 2023-09-27 18:04:03
我得到一个null reference exception
,我不知道如何解决它或为什么它甚至发生。
private void editThisToolStripMenuItem_Click(object sender, EventArgs e)
{
if (dataGridView1.SelectedRows.Count <= 1)
{
Form2 f2 = new Form2(dataGridView1.SelectedRows[0].Cells[1].Value.ToString(), Convert.ToInt32(dataGridView1.SelectedRows[0].Cells[2].Value));
f2.ShowDialog();
textBox2.Text = textBox1.Text.Replace(f2.oldtext, f2.newtext);
this.dataGridView1.SelectedRows[0].Cells[3].Value = f2.newtext;
this.dataGridView1.SelectedRows[0].Cells[3].Style.BackColor = Color.IndianRed;
}
else
{
ONOType[] ono = new ONOType[this.dataGridView1.SelectedRows.Count];
int indexerr = 0;
foreach (DataGridViewRow r in dataGridView1.SelectedRows)
{
ono[indexerr].newtext = this.dataGridView1.SelectedRows[indexerr].Cells[3].Value.ToString(); //null expection at ono[indexerr].newtext
ono[indexerr].oldtext = this.dataGridView1.SelectedRows[indexerr].Cells[1].Value.ToString();
ono[indexerr].offset = Convert.ToInt32(dataGridView1.SelectedRows[indexerr].Cells[0].Value);
indexerr++;
}
Form3 f3 = new Form3(ono);
f3.ShowDialog();
indexerr = 0;
for (int i = 0; i < dataGridView1.SelectedRows.Count; i++)
{
textBox2.Text = textBox1.Text.Replace(f3.nt[i].oldtext, f3.nt[i].newtext);
this.dataGridView1.SelectedRows[i].Cells[3].Value = f3.nt[i].newtext;
this.dataGridView1.SelectedRows[i].Cells[3].Style.BackColor = Color.IndianRed;
}
}
}
这里是ono类
namespace IEditor
{
public class ONOType
{
public string oldtext { get; set; }
public string newtext { get; set; }
public int offset { get; set; }
}
}
问题开始于:
ONOType[] ono = new ONOType[this.dataGridView1.SelectedRows.Count];
它定义了这个类类型的新数组all为null,这是我不想要的,可能是由关键字"new"引起的,如果没有"new"关键字,我在给这个数组中的对象赋值时会得到compp . error。
我所做的尝试是向该类添加一个actor,为每个成员的这个数组成员分配默认值(又名为oldtext/newtext/offset赋值),但在减速时,这个对象数组中的对象仍然是空的,我确实尝试在get/set属性中做同样的事情,但我仍然失败了。
请在解决方案中加上解释
您正在创建一个新的ONOType
引用数组:
ONOType[] ono = new ONOType[this.dataGridView1.SelectedRows.Count];
但是没有创建任何实际的ONOType
对象。它只是一个没有引用任何东西的变量数组。
当您尝试分配ono[indexerr].newtext
时,ono[indexerr]
的元素是空引用。
如果你做了:
ono[indexerr] = new ONOType();
ono[indexerr].newtext = this.dataGridView1.SelectedRows[indexerr].Cells[3].Value.ToString();