我有一个名为“DoStuff()”的方法,它的作用是检查复选框是否被选中以及它们是否有效。
private void DoStuff()
{
if(Checkbox1.isChecked == true)
{
DoSomething();
}
if(Checkbox2.isChecked == true)
{
DoSomething();
}
if(Checkbox3.isChecked == true)
{
DoSomething();
}
}
如何正确设置bool所以我不必为每个if语句执行“== true”?
答案 0 :(得分:7)
由于复选框可以是三态(已选中,未选中且未确定),因此== true
必须保留Checkbox.IsChecked
,因为IsChecked
是一个可以为空的布尔值,它可以是' t只需像标准布尔值一样进行测试。
即使复选框是双状态并且无法将其置于其中,用户null
的不确定状态仍然是可以为空的布尔值,因为它可以设置为== true
编程。
在这种情况下,保留代码绝对没有害处,就像你拥有它一样。您尝试删除if ((bool)Checkbox1.IsChecked)
{
}
所做的任何事情都可能使代码更不易读,维护更少且可能更不稳定。例如,您可以这样做:
Conf. properties>>Debugging>>Command
但如果复选框处于不确定状态,这将引发NullReferenceException,因此根本不是好习惯。
答案 1 :(得分:3)
BOOL?是可以为空的类型,可以是'true','false'或'null'。
如果您知道该值不为null,则可以执行以下操作:
if(Checkbox1.IsChecked.Value)
或者如果你不知道它是否为null:
if(Checkbox1.IsChecked ?? false)
但保持== true
......
答案 2 :(得分:0)
在if之后放在括号中的任何内容都必须是布尔值,否则代码将无法编译。基本上它只能理解if(false)和if(true)
IsChecked是一个可以为空的bool,它可以是true,false或null。需要== True才能留下"谓词"可以解析为真或假。
如果缺陷为null则.IsChecked == true将为false,如果IsChecked为false,则.IsChecked == true也将为false。只有当.IsChecked == true时,才会返回true并进入if块
答案 3 :(得分:0)
我对你的问题感到有点困惑,但阅读你的评论听起来好像你正在处理一个可以为空的布尔值。在这种情况下,它可以是null,true或false。可空对象具有属性.HasValue,应在访问之前进行检查。如果HasValue为true,则它不是空对象。
您的代码如下所示:
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
为false,则Value
为空。
答案 4 :(得分:0)
您可以创建一个扩展方法,如下所示
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();
}
}
答案 5 :(得分:-1)
CheckBox.IsChecked是Nullable<bool>
属性
if语句需要直接布尔
== 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?假的
答案 6 :(得分:-1)
你可以这样做:
public function uploadAction()
{
$this->_helper->viewRenderer->setNoRender();
$data = $errors = $line_of_text = [];
if ($this->getRequest()->isPost()) {
$path = '/cronjobs/uploads/charge_type_details';
if (!@mkdir($path, 0777, true) && !is_dir($path)) {
$data['error'][] = "Not able to create subdirectory: <strong>{$path}</strong>";
echo json_encode($data);
die();
}
$di = new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS);
$ri = new RecursiveIteratorIterator($di, RecursiveIteratorIterator::CHILD_FIRST);
foreach ($ri as $file) {
$file->isDir() ? rmdir($file) : unlink($file);
}
$adapter = new Zend_File_Transfer_Adapter_Http();
$adapter->setDestination($path);
$adapter->addValidator('Extension', false, ['extension' => 'csv', 'case' => true]);
$adapter->addValidator('MimeType', false, 'text/plain');
$adapter->addValidator('Size', false, ['max' => ini_get('upload_max_filesize').'B']);
if ($adapter->isValid() === false) {
foreach ($adapter->getMessages() as $message) {
$data['error'][] = $message;
}
echo json_encode($data);
die();
}
$file = $adapter->getFileInfo()['file'];
$ext = pathinfo($file['name'])['extension'];
$new_path = $file['tmp_name'];
$file_handle = fopen($new_path, 'r');
while (($result = fgetcsv($file_handle)) !== false) {
if (array(null) !== $result) { // ignore blank lines
$line_of_text[] = $result;
}
}
$unique_rows = array_unique($line_of_text, SORT_REGULAR);
if (false === $this->isFileHeadersValid(
array_map('strtolower', $unique_rows[0]),
[
'country',
'charge_type',
'charge_type_code',
'business_sla_description',
'service_provider',
'sub_menu',
'charge_type_group',
'transaction_type',
'slc_code',
'coverage_code',
'standard_sla',
]
)
) {
$data['error'][] = $this->translate->_('Required file headers are not present. Please check the file and try again.');
echo json_encode($data);
die();
}
unset($unique_rows[0]);
$data['error'] = $errors;
$data['file'] = array(
'name' => $file['name'],
'size' => $adapter->getFileSize(),
'file_ext' => $ext
);
} else {
$data['error'] = 'Invalid request.';
}
echo json_encode($data);
die();
}