C# 如何强制转换可能为空的布尔值

C# 如何强制转换可能为空的布尔值,c#,.net,C#,.net,我从数据库中提取数据,然后检查它是否为真,如果为真,则选中复选框。问题是变量可能为空,然后抛出错误System.InvalidCastException:指定的强制转换无效 有什么想法吗? 下面是运行良好的代码,除非它得到一个空字段 if ((bool)myReader["Analytics"] == true) Analytics.Checked = true; 您可以使用DataReader的方法 您可以使用DataReader的方法 试着这样做: var column = reader.

我从数据库中提取数据,然后检查它是否为真,如果为真,则选中复选框。问题是变量可能为空,然后抛出错误System.InvalidCastException:指定的强制转换无效

有什么想法吗? 下面是运行良好的代码,除非它得到一个空字段

if ((bool)myReader["Analytics"] == true) Analytics.Checked = true;
您可以使用DataReader的方法

您可以使用DataReader的方法

试着这样做:

var column = reader.GetOrdinal("Analytics");
if (!myReader.IsBDNull(column))
{
    Analytics.Checked = myReader.GetBoolean(column);
}
试着这样做:

var column = reader.GetOrdinal("Analytics");
if (!myReader.IsBDNull(column))
{
    Analytics.Checked = myReader.GetBoolean(column);
}

空值作为DBNull.Value返回,因此您可以执行以下操作:

if(myReader["Analytics"]!=DBNull.Value)
   Analytics.Checked = (bool)myReader["Analytics"];

只要数据库中的列的类型为bit

,空值将作为DBNull.Value返回,因此您可以执行以下操作:

if(myReader["Analytics"]!=DBNull.Value)
   Analytics.Checked = (bool)myReader["Analytics"];
只要数据库中的列是bit类型的,就试试这个

Analytics.Checked = (myReader["Analytics"] == "" || (bool)myReader["Analytics"] ==  false) ? false : true );
试试这个

Analytics.Checked = (myReader["Analytics"] == "" || (bool)myReader["Analytics"] ==  false) ? false : true );

太棒了-谢谢!因此,要确认它现在正在做的是:检查字段以确保其不为空,然后根据需要分配检查。为什么我们需要使用getOrdinal,而不仅仅是获取字段的值?ISDBNull方法获取一个值,该值指示列是否包含不存在的值或缺少的值。所以这个if条件检查该列是否返回null或有效值,如果不是null,则执行if块内的代码。查看我答案中的链接了解更多详细信息单击ISDBnull,因为基于顺序的查找比命名查找更有效。太棒了-谢谢!因此,要确认它现在正在做的是:检查字段以确保其不为空,然后根据需要分配检查。为什么我们需要使用getOrdinal,而不仅仅是获取字段的值?ISDBNull方法获取一个值,该值指示列是否包含不存在的值或缺少的值。所以这个if条件检查该列是否返回null或有效值,如果不是null,则执行if块内的代码。查看我答案中的链接了解更多详细信息单击ISDBNULL,因为基于顺序的查找比命名查找更有效。