2015-07-05 2 views
-1

Я написал следующий код, в котором указаны IsClear, IsPermanent и IsSalaried. IsSalaried является нулевым логическим. Я ожидаю выход как "Clear,Permanent,Salaried". Но он дает выход как "Clear". Может ли кто-нибудь помочь мне понять следующую концепцию:Понимание в конкатенации строк

using System; 

public class Program 
{ 
    public static void Main() 
    { 
     MyClass Employee = new MyClass(); 
     Employee.IsClear = true; 
     Employee.IsPermanent = true; 
     Employee.IsSalaried = true; 

     string Test = 
      Employee.IsClear ? "Clear" : "" 
      + (Employee.IsPermanent ? "Permanent" : "") 
      + (Employee.IsSalaried.HasValue ? "Salaried" : ""); 

     Console.WriteLine(Test); 
    } 
} 

public class MyClass 
{ 
    public bool IsClear { get; set; } 
    public bool IsPermanent { get; set; } 
    public bool? IsSalaried { get; set; } 
} 

Заранее благодарен!

+0

«IsClear, IsPermanent, IsSalaried true» <- это утверждение неверно. – sstan

+0

@vivek: Здесь вы [?: Оператор (ссылка на C#)] (https://msdn.microsoft.com/en-us/library/ty67wk28.aspx). Надеюсь, эта помощь. – hungndv

+1

@sstan Все верно. Но все еще не удается получить желаемый результат. – Kenta

ответ

1

Это должно дать ошибку компиляции, так как Test неинициализирован с правой стороны! Должно работать следующее:

static void Main(string[] args) 
    { 
     bool a = true; 
     bool b = true; 
     bool c = true; 
     string x = ""; 
     string Test = x + (a ? "Clear" : "") + (b ? "Permanent" : "") + (c ? "Salaried" : ""); 
     Console.WriteLine(Test); 

     Console.ReadLine(); //so that my console window doesn't close 

    }