无法强制转换为字符串
本文关键字:字符串 转换 | 更新日期: 2023-09-27 18:00:59
我写了一些代码,如下所示,但在场景-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是可为null的布尔变量。
如果将这个Employee.IsClear ? "Clear" : ""
放在括号内,它就会起作用。
Test = Test + (Employee.IsClear ? "Clear" : "");
之所以会发生这种情况,是因为+
将首先进行评估。因此,这个结果将是一个字符串,从条件运算符的左侧,您将得到一个字符串而不是布尔或一个可以计算为布尔值的表达式。
另一方面,使用括号,首先计算括号内的表达式,然后将结果与Test
连接起来。
这与运算符的优先级有关。详细的解释可以在这里找到。
错误显示您试图将可为null的布尔值转换为布尔值,您可以在以下语句中执行此操作:
(Employee.IsSalaried ? "Salaried" : "");
你应该检查它是否有一个值:
((Employee.IsSalaried.hasValue && Employee.IsSalaried.Value) ? "Salaried" : "");
Test = Test + (Employee.IsClear ? "Clear" : "");
运算符的优先级可以在这里找到