2015-07-04 2 views
0

Я написал код, как показано ниже, но в сценарии - 1, он выдает ошибку во 2-й строке, не могу неявно преобразовать строку типа в bool, где, как и в сценарии-2, она выдает ошибку, указывающую cann не implicitely convert тип 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

Bool и строки разные –

+0

Но я возвращаю строку только вправо (например, наемный труд) – Kenta

ответ

3

Если вы поместите этот Employee.IsClear ? "Clear" : "" внутри скобок, он будет работать.

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

Это происходит потому, что + будет оцениваться в первую очередь. Таким образом, этот результат будет строкой, и с левой стороны условного оператора у вас будет строка вместо bool или выражение, которое можно оценить с помощью логического значения.

С другой стороны, используя скобку, выражение внутри скобки будет оцениваться первым, а затем результат будет объединен с Test.

Это связано с приоритетом операторов. Подробное объяснение можно найти here.

+0

Не могли бы вы рассказать мне, в чем проблема без круглых скобок? – Kenta

+0

Конечно. Я пишу это сейчас. – Christos

+0

Спасибо, друг за вашу помощь .. Я редактировал свой вопрос. не могли бы вы дать ответ на второй сценарий тоже .. Я буду принимать это как ответ – Kenta

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

Приоритет операторов можно найти here

2

ошибка показывает, что вы пытаетесь преобразовать обнуляемого логическое значение в булево, который вы делаете в этом заявлении:

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

Вы должны проверить, если он имеет значение:

((Employee.IsSalaried.hasValue && Employee.IsSalaried.Value) ? "Salaried" : ""); 
Смежные вопросы