如何确定数据表是否为空,而不是初始化



我有一个方法可以在数据表上做一些工作,例如

private void MyMethod(DataTable table)
{
    if(table.Rows.Count > 0)
    {
       //  do some work
    }
 }

但是,如果该方法从它提供的应用程序接收空数据表,则会出现"对象引用未设置为对象的实例"错误。

我也试过。

。 。
if(table.IsInitialized) { }

if(table != null) {  }

但我收到相同的错误消息。

如何测试以查看传入的数据表是否已实例化而不是空?

数据表来自WinForms应用程序中的数据网格的转换,即

DataTable table = (DataTable)datagridview.DataSource;

因此,如果原始数据网格视图为空,则会出现问题。

如果您遇到这样的情况,则会出现"引用未设置为对象的实例"异常:

object someObject = null;
//Throws an exception. You try to call a instance function without specify the instance
someObject.ToString();
因此,要么

表为空,要么行返回空。在 C# 6.0 之前,您必须走艰难的道路:

if(table != null && table.Rows != null && table.Rows.Count > 0)

我假设计数不是一个可为空的整数。如果是,您当然也必须检查它是否为空。

至少对于调试,您可能希望使用"每行一个操作"规则更详细地编写该代码。这将帮助您找到哪个操作确切返回 null。无论如何,JiT 很可能会在调试运行之外删除临时变量。

//If table is null, exception here
var Row = table.Row;
//If Row is null, Exception here.
var Count = Row.Count;
//Nothing is null. Continue.
if(Count > 0);

在 C# 6.0 中,新的 Null 条件运算符可以将其编写得更短一些:https://msdn.microsoft.com/en-us/library/dn986595.aspx但是,它仍然是相同的代码。

table != null应该可以工作。

下面是一个示例:

using System;
using System.Data;
public class Program
{
    public static void Main()
    {
        DataTable table = null;
        Test(table);
        table = new DataTable();
        Test(table);
    }
    public static void Test(DataTable table)
    {
        if(table == null)
        {
            Console.WriteLine("table is null");
            return;
        }
        if(table.IsInitialized == false)
        {
            Console.WriteLine("table is not initalised.");
            return;
        }
        Console.WriteLine("table row count: " + table.Rows.Count);
    }
}

输出:

table is null
table row count: 0

https://dotnetfiddle.net/0s2Jp8

如何测试以查看传入的数据表是否已实例化而不是 请空?

从技术上讲,这应该有效,如果下面的代码没有检测到table是否已实例化,那么除了手头的问题之外,还有另一个问题。

if(table != null && table.Rows != null && table.Rows.Count > 0)

我知道这是一个几年前的问题,但是现在有一种简单的方法可以在 C# 中解决这个问题,如下所示:

if ((dataTableName?.Rows?.Count ?? 0) > 0)

相关内容

  • 没有找到相关文章

最新更新