无法转换为字符串

时间:2015-07-04 17:55:24

标签: c# implicit-conversion

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

3 个答案:

答案 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