如何正确使用带有if语句的bool?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何正确使用带有if语句的bool?相关的知识,希望对你有一定的参考价值。
我有这个名为“DoStuff()”的方法,它的作用是检查复选框是否被检查,然后它们是否做了什么。
private void DoStuff()
{
if(Checkbox1.isChecked == true)
{
DoSomething();
}
if(Checkbox2.isChecked == true)
{
DoSomething();
}
if(Checkbox3.isChecked == true)
{
DoSomething();
}
}
我如何正确设置bool所以我不必为每个if语句执行“== true”?
由于复选框可以是三态(选中,未选中和未确定),因此您必须保留== true
,因为Checkbox.IsChecked
是一个可以为空的布尔值,不能像标准布尔值那样进行测试。
即使复选框是双状态并且无法将其设置为不确定状态,用户IsChecked
仍然是可以为空的布尔值,因为它可以通过编程方式设置为null
。
在这种情况下,离开代码绝对没有害处,就像你拥有它一样。你试图删除== true
所做的任何事情都可能使代码的可读性降低,可维护性降低,并且可能不太稳定。例如,您可以这样做:
if ((bool)Checkbox1.IsChecked)
{
}
但是如果复选框处于不确定状态,这将引发NullReferenceException,因此根本不是好习惯。
MSDN page on the IsChecked
property
布尔?是可以为空的类型,可以是'true','false'或'null'。
如果您知道该值不为null,那么您可以执行以下操作:
if(Checkbox1.IsChecked.Value)
或者如果您不知道它是否为null:
if(Checkbox1.IsChecked ?? false)
但保持== true
也没有错...
在if之后放在括号中的任何内容都必须是一个布尔值,否则代码将无法编译。基本上它只能理解if(false)和if(true)
IsChecked是一个可以为空的bool,它可以是true,false或null。需要== True才能留下“谓词”,可以将其解析为true或false。
如果缺陷为null则.IsChecked == true将为false,如果IsChecked为false,则.IsChecked == true也将为false。只有当.IsChecked == true时,才会返回true并进入if块
我对你的问题感到有些困惑,但阅读你的评论听起来好像你正在处理一个可以为空的布尔值。在这种情况下,它可以是null,true或false。可空对象具有属性.HasValue,应在访问之前进行检查。如果HasValue为true,则它不是null对象。
您的代码如下所示:
if(checkbox.IsChecked.HasValue == true && checkbox.IsChecked.Value == true)
{
DoStuff();
}
略短的版本:
if(checkbox.IsChecked.HasValue && checkbox.IsChecked.Value)
{
DoStuff();
}
bool被“隐藏”在可以为空的对象后面,因此您可以使用Value
访问bool。首先,您需要检查HasValue
,如果这是真的,请通过Value
访问bool。如果HasValue
为假,那么Value
为空。
您可以创建一个扩展方法,如下所示
public static class BoolExtensions
{
public static bool GetBoolOrDefault(this bool? val, bool defaultval)
{
return val.HasValue ? val.Value : defaultval;
}
}
并以这种方式使用
private void DoStuff()
{
if(Checkbox1.isChecked.GetBoolOrDefault(false))
{
DoSomething();
}
if(Checkbox2.isChecked.GetBoolOrDefault(false))
{
DoSomething();
}
if(Checkbox3.isChecked.GetBoolOrDefault(false))
{
DoSomething();
}
}
你可以做 :
if (Checkbox1.Checked)
CheckBox.IsChecked是Nullable<bool>
的财产
如果声明需要直布尔
通过== true
你得到一个隐含的演员
选项
Debug.WriteLine(cb1.IsChecked.ToString());
//Debug.WriteLine(((bool)cb1.IsChecked).ToString()); // this fails on null
if (cb1.IsChecked ?? false)
Debug.WriteLine("cb1.IsChecked ?? false");
if (cb1.IsChecked ?? true)
Debug.WriteLine("cb1.IsChecked ?? true");
if (cb1.IsChecked == true)
Debug.WriteLine("cb1.IsChecked == true");
你得到的== true是cb1.IsChecked ??假
以上是关于如何正确使用带有if语句的bool?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 ? : 带有 Razor 和内联代码块的 if 语句
Operator '||' cannot be applied to operands of type 'bool?' and 'bool?'(代码片段