我想知道是否有一种方法可以在引用之前检查对象是否存在。不仅仅是检查它是否为空,因为这也不起作用。我正在使用 EPPlus 包来读取 Excel 文件,当它到达一个没有任何值数据的索引时,它会发送一个异常。
private DataTable WorksheetToDataTable(string tableName)
{
excelSheet = excelWorkbook.Worksheets[tableName];
DataTable dt = new DataTable();
try
{
int totalRows = excelSheet.Dimension.End.Row;
int totalCols = excelSheet.Dimension.End.Column;
for (int j = 1; j <= totalCols; j++)
{
dt.Columns.Add();
for (int i = 1; i <= totalRows; i++)
{
if (j == 1)
{
dt.Rows.Add();
}
try
{
dt.Rows[i - 1][j - 1] = excelSheet.Cells[i, j].Value.ToString();
//dt.Rows[i - 1][j - 1] = Object.ReferenceEquals(null, excelSheet.Cells[i, j].Value.ToString()) ? "" : excelSheet.Cells[i, j].Value.ToString();
}
catch
{
dt.Rows[i - 1][j - 1] = "";
}
}
}
return dt;
}
catch
{
MessageBox.Show("Error: Referenced Excel Table is empty, or indexed improperly! Check Excel formatting.", "Error");
return dt;
}
}
Run Code Online (Sandbox Code Playgroud)
所以你可以看到我之前尝试检查是否excelSheet.Cells[i, j].Value.ToString()为空,并且它发送了在上面的 try/catch 中捕获的相同异常。我必须解析很多单元格,其中很多单元格将完全是空的,这增加了很多
抛出异常:BBSApp.exe 中的“System.NullReferenceException”
到输出控制台。有没有办法在调用对象之前检查对象是否存在,甚至在不使用 try/catch 的情况下检查它是否为空?
if(excelSheet.Cells[i, j].Value.ToString() != null)
Run Code Online (Sandbox Code Playgroud)
简单地检查它是否为空(如上所示)会发送相同的异常,因为它首先不存在。
尝试这个:
if(excelSheet.Cells[i, j].Value != null)
Run Code Online (Sandbox Code Playgroud)
您正在检查该Value属性是否为空。发生空引用异常是因为您尝试调用对象ToString()上的方法null。
或者,您可以使用 null 访问运算符:
if(excelSheet.Cells[i, j]?.Value?.ToString() != null)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7471 次 |
| 最近记录: |