无法转换为字符串

Unable to cast to string

我写了一些代码如下,但在场景 - 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 是可为空的布尔变量。

Test = Test + (Employee.IsClear ? "Clear" : "");

可以找到运算符的优先级here

如果将此 Employee.IsClear ? "Clear" : "" 放在括号内,它将起作用。

Test = Test + (Employee.IsClear ? "Clear" : ""); 

发生这种情况是因为 + 将首先被评估。所以这个结果将是一个字符串,从条件运算符的左侧你将得到一个字符串而不是布尔值或可以计算为布尔值的表达式。

另一方面,使用括号时,首先会计算括号内的表达式,然后将结果与 Test 连接起来。

这与运算符的优先级有关。可以找到详细的解释here.

错误表明您尝试将可为空的布尔值转换为布尔值,您在以下语句中这样做:

(Employee.IsSalaried ? "Salaried" : ""); 

你应该检查它是否有值:

 ((Employee.IsSalaried.hasValue && Employee.IsSalaried.Value) ? "Salaried" : "");