() 안의 조건이 맞는지 체크, 맞으면 왼쪽 틀리면 오른쪽 반환
int a = 10;
bool diff = (a > 5) ? true :false; //diff는 true
삼항연산자를 클래스의 생성자에 써서 이렇게 표현 가능
class mCharacter
{
public Weapon wpn;
public string Name = "Ingrid";
public int? lvl;
public mCharacter(string name)
{
Name = (name == "") ? "미기입" : name;
wpn = (wpn == null) ? new Weapon() : wpn;
lvl = (lvl == null) ? 1 : lvl;
}
}
class Car
{
public void Drive()
{
Console.WriteLine("Car Drive");
}
}
static void Main(string[] args)
{
Car car = null;
car?.Drive(); //car 객체가 null인데 에러 안남 (실행은 안됨)
}
int? aa = null;
Console.WriteLine(aa ?? 124); //124 출력.
class Weapon
{
public string Name = null;
}
class mCharacter
{
public Weapon wpn;
public string Name = "Ingrid";
public int? lvl;
//삼향연산자를 이렇게 쓸 수 있다.
public mCharacter(string name)
{
wpn = new Weapon();
wpn.Name = name;
}
public mCharacter()
{
wpn = new Weapon();
}
}
static void Main(string[] args)
{
//1. 삼향연산자
int toDetermine = 10;
bool isBiggerthan5;
//삼항연산자 사용
isBiggerthan5 = (toDetermine > 5) ? true : false;
//삼향연산자 예시 (생성자가 잘못기입되었으면 처리)
mCharacter mChar = new mCharacter("Mage");
//삼항 연산자 안쓰면 코드가 너무 길어짐
if (toDetermine > 5)
{
isBiggerthan5 = true;
}
else
{
isBiggerthan5 = false;
}
//2. ? 연산자
mCharacter mChar2 = null;
Console.WriteLine(mChar2?.Name); //
Console.WriteLine(mChar2?.wpn?.Name); //출력없음. wpn이 비어있기때문에
//3. ?? 연산자
mCharacter[] myTroop = new mCharacter[4];
myTroop[0] = new mCharacter();
myTroop[1] = new mCharacter("찰");
myTroop[2] = new mCharacter();
myTroop[3] = new mCharacter("칼");
//??연산자는
//??기준, 좌측에있는 참조형이 만약 null이라면 ??의 우측 내용치 실행
//null이 아니라면 ??기준 좌측에 있는 내용을 그대로 사용
int? aa = null;
Console.WriteLine(aa ?? 124); //124 출력. aa가 null이기때문에
foreach (var mych in myTroop)
{
//Console.WriteLine(mych.wpn.Name.ToString()); //에러
Console.WriteLine(mych.wpn.Name?.ToString()); //?연산자 써도 가능
//Console.WriteLine(mych.wpn.Name ?? "무기가 저장되지 않았습니다");
}