用例是一个带有复选框的GUI,如果复选框被标记,我只想在其中运行遵从性检查(外部python脚本)。如果符合性检查运行,我想保存处理的输出字符串。
这是一个我的代码的快照:
Task<string> comp_python;
if (compliance) // compliance is t/f based on whether the checkbox is marked
{
string cmd = "some python command";
comp_python = runCompAsync(cmd);
}
// some processing
if (compliance)
{
string comp_res = await comp_python; // out of scope error here on comp_python
}
在第二个条件中,我在comp_python任务对象上得到一个超出范围的错误。我已经尝试删除这两个块之间的所有处理,我的范围仍然是错误的。什么好主意吗?
如果这可以通过重写代码的另一种方式完成,我也可以接受另一种解决方案。
可达性规则和确定赋值规则不知道compliance
在两个if
语句中是相同的值。因此,编译器认为有可能第一个if
是false
,第二个if
是true
。comp_python
将永远不会被分配到该路径上;它是声明的,但它从来没有根据确定赋值规则明确地赋值。(局部变量是而不是)如果未赋值,则为Null/default,如果访问可能未赋值的local,则会导致编译器错误。
if (compliance) // compliance is t/f based on whether the checkbox is marked
{
string cmd = "some python command";
Task<string> comp_python = runCompAsync(cmd);
someProcessing();
string comp_res = await comp_python;
}
else
{
someProcessing();
}
语言规范参考:可达性和明确赋值。