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();

我得到以下错误:

对象引用未设置为对象的实例

我已经想了好几个小时了。也许这真的很简单。我不明白。请帮助感谢

C#类中的Get和Set

调试提示:将巨大的语句拆分为多个小语句:

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);