C#类中的Get和Set
本文关键字:Set Get | 更新日期: 2023-09-27 18:27:36
我有一个类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace OrderManagementv1
{
public class info
{
public string startPickTicket { get; set;}
public string endPickTicket { get; set;}
public string ordFile { get; set;}
public int ordStartPage { get; set;}
public int ordEndPage { get; set;}
public string bolFile { get; set;}
public int bolStartPage { get; set;}
public int bolEndPage { get; set;}
public string pickFile { get; set;}
public int pickEndPage { get; set;}
public string invFile { get; set;}
public int invEndPage { get; set;}
public info()
{
}
}
}
然后我做以下事情:
info i = new info();
i.startPickTicket = dataGridView2.CurrentRow.Cells[dataGridView2.SelectedCells[0].ColumnIndex].Value.ToString();
我得到以下错误:
对象引用未设置为对象的实例
我已经想了好几个小时了。也许这真的很简单。我不明白。请帮助感谢
调试提示:将巨大的语句拆分为多个小语句:
var row = dataGridView2.CurrentRow;
var cells = row.cells;
var cell = dataGridView2.SelectedCells[0];
var selectedIndex = cell.ColumnIndex;
var selectedCell = cells[selectedIndex];
var selectedValue = selectedCell.Value;
i.startPickTicket = selectedValue.ToString();
出现错误的行将揭示问题的原因。
您的问题来自您试图获取的数据,而不是您的实体。
你应该看看dataGridView2.CurrentRow,这肯定是"null"。或者细胞不存在。
此错误意味着某些内容被设置为null
。在您的代码中,它可以是以下任意一种:
dataGridView2
dataGridView2.CurrentRow
dataGridView2.CurrentRow.Cells[dataGridView2.SelectedCells[0].ColumnIndex]
dataGridView2.CurrentRow.Cells[dataGridView2.SelectedCells[0].ColumnIndex].Value
dataGridView2.SelectedCells[0]
如果你稍微重构一下你的代码,就会更容易发现这个错误,因为它会发生在一行发生的事情更少
您还可以编写更具防御性的代码,并添加抛出信息异常的检查,以便在运行时获得更有用的异常。使用Convert.ToString
而不是.ToString()
将使代码容忍小区的Value
为空。
if (dataGridView2 == null)
throw new InvalidOperationException("The grid is null");
if (dataGridView2.SelectedCells.Length == 0)
throw new InvalidOperationException("No cells are selected in the grid");
if (dataGridView2.CurrentRow == null)
throw new InvalidOperationException("The grid has no current row");
var cell = dataGridView2.SelectedCells[0]
var currentRowCell = dataGridView2.CurrentRow.Cells[cell.ColumnIndex];
info i = new info();
i.startPickTicket = Convert.ToString(currentRowCell.Value);