无法强制转换为字符串

本文关键字:字符串 转换 | 更新日期: 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" : "");

运算符的优先级可以在这里找到