我不是在谈论这个的事件处理程序,而是一个简单的If语句
检查CheckBox
是否被选中。到目前为止我有:
if (chkRevLoop.IsChecked == true){}
但是这会引发错误:
无法隐式将类型“bool?”转换为“bool”。存在显式转换(是否缺少强制转换?)
我是否忽略了某种方法来解决这个问题?
我不是在谈论这个的事件处理程序,而是一个简单的If语句
检查CheckBox
是否被选中。到目前为止我有:
if (chkRevLoop.IsChecked == true){}
但是这会引发错误:
无法隐式将类型“bool?”转换为“bool”。存在显式转换(是否缺少强制转换?)
我是否忽略了某种方法来解决这个问题?
bool?
转换为 bool
才能使其正常工作。if((bool)(chkRevLoop.IsChecked)){}
由于它已经是一个bool
条件,所以不需要放置true false,因为如果它是true,那么它只会进入这个if条件,否则不会。
因此,在这里甚至不需要放置chkRevLoop.IsChecked == true
,默认情况下您正在通过放置IsChecked
来询问==true
。
一个 bool?
可以是 true、false 或 null,而 bool
只能是 true 或 false。 ?
使类型“可空”,并在通常不允许时添加了 null 作为可能性,因此您可以直接使用。
if ((bool)chkRevLoop.IsChecked == true){}
或者
if (chkRevLoop.IsChecked == (bool?)true){}
让它匹配并正常工作。第二种方式可能更好,因为我不知道如果IsChecked为空会发生什么情况。
IsChecked
为 null,你的第一个示例将抛出 InvalidOperationException 异常。 - vesanWinForms
应用程序上(其中 CheckBox.Checked 是 bool
,而不是 bool?
,而 OP 明确指出了 WPF
)。只是一个想法。 - nurchi请考虑检查属性是否具有值:
var isChecked = chkRevLoop.IsChecked.HasValue ? chkRevLoop.IsChecked : false;
if (isChecked){}
== true
,直接写 if (isChecked)
就可以了。 - On The Net Again只需要一行代码就可以检查单选按钮是否被选中:
string status = Convert.ToBoolean(RadioButton.IsChecked) ? "Checked" : "Not Checked";
IsChecked
属性是可空布尔值。public bool? IsChecked { get; set; }
创建一个可空的布尔值并赋值给它,这样就可以为您工作了。
bool? NullableBool = chkRevLoop.IsChecked;
if(NullableBool == true) { }
Nullable<bool> isChecked = new Nullable<bool>();
isChecked = chkRevLoop.IsChecked;
if (isChecked.HasValue && isChecked.Value)
{
}
if(chkRevLoop.IsChecked ?? false) { }
,更加简洁,不需要所有的样板代码 :-) - Jcl