如何将bool转换为可空bool(bool?)

3
我有一个带有列的表提供程序。
                 implied(tiny int)(something like nullable bool)
                 providerid(int)

我有一个表格和一个复选框。
我正在使用C#编写winforms应用程序。
我正在使用实体,我的DbContext名称为DbContext。
如何在C#中将bool转换为可空bool(bool?)。
我已经尝试了这种方式。
      if (chkbox.checked == true)

            bool yes = 0;
        else

          bool   yes = 1;

        dbcontext.implied = yes;

但是出现了错误。
Cannot convert bool to bool?

6
这段代码在多个方面上都不符合有效的C#语法,你也没有说出错在哪里。请阅读 http://tinyurl.com/so-hints 并编辑您的问题。 - Jon Skeet
1
听起来很奇怪。你能发一些实际展示问题的代码吗?你的代码示例明显无法编译。yes 的作用域太小,无法到达将 yes 分配给 implied 的行,通常 bool 会被隐式转换为 bool? - CodesInChaos
直接赋值应该有效。 - sll
对不起,大家,我没有提供信息......信息太多了......所以我无法提供那个...... - Glory Raj
5个回答

16

显式转换为 bool?

bool b = true;
bool? b2 = (bool?)b;

如果您感兴趣的话,可以将bool?转换为bool。首先可以通过检查HasValue来确定其是否为null,如果不是null则返回true,否则返回false

如果它确实有一个值,则可以强制转换为布尔值。

bool? b = null;
if (b.HasValue == false) // it's null
{
  //initialize b 
  b = false;
}
else if((bool)b == true)
{
  // do whatever
}

请查看http://msdn.microsoft.com/en-us/library/bb384091.aspx了解bool类型转换为bool?类型的方法。


3
可以直接像这样做:
bool result = true;
bool? toBindData = (bool?)result;

强制转换不应该是必要的。 - CodesInChaos

3

dbcontext.implied = new Nullable<bool>(yes);


0

这里是一个修复方案:

if (Convert.ToBoolean(chkbox.checked) == true)

或者一个更简单的版本:

if (Convert.ToBoolean(chkbox.checked))

默认情况下,预期语句的真实性

依赖项:

using.System;

0

尝试使用Convert.ToBoolean(Your checkBox)

以下是我在我的DataGridView上测试检查CheckBox列的方法,它可以正常工作。

if ( Convert.ToBoolean( dgv.Rows[r].Cells["Delete"].Value))
{
    //Do work;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接