我写了一些代码如下,但在方案-1中,它在第二行引发错误说明不能隐含地将类型字符串转换为bool,如在方案-2中它抛出错误说明不能隐含地转换类型bool?布尔。
Scenario - 1
string Test = Employee.IsPermanent ? "Permanent" : "";
Test = Test + Employee.IsClear ? "Clear" : ""; //Throws error
scenario - 2
Test = Test + (Employee.IsClear ? "Clear" : "") + (Employee.IsPermanent ? "Permanent" : "") + ( Employee.IsSalaried ? "Salaried" : ""); //Throws error
注意 - IsPermanent和IsClear是布尔变量,其中IsSalaried是可以为空的布尔变量。
答案 0 :(得分:3)
如果将此Employee.IsClear ? "Clear" : ""
放在括号内,它将起作用。
Test = Test + (Employee.IsClear ? "Clear" : "");
这种情况正在发生,因为将首先评估+
。所以这个结果将是一个字符串,从条件运算符的左侧你可以得到一个字符串而不是bool或一个可以计算为布尔值的表达式。
另一方面,使用括号将首先评估括号内的表达式,然后将结果与Test
连接。
这与运营商的优先级有关。可以找到详细的解释here。
答案 1 :(得分:2)
错误显示您尝试将可以为空的布尔值转换为布尔值,您可以在此语句中执行此操作:
(Employee.IsSalaried ? "Salaried" : "");
您应该检查它是否有值:
((Employee.IsSalaried.hasValue && Employee.IsSalaried.Value) ? "Salaried" : "");
答案 2 :(得分:1)
Test = Test + (Employee.IsClear ? "Clear" : "");
可以找到运算符的优先级here