C#/.NET(20): null 병합 연산자(??)
null 병합 연산자(??) 의 기능
null 병합 및 null 조건부 연산자를 사용하면, 값이 null인 경우 일부 작업을 수행하고 그렇지 않은 경우 다른 작업을 수행한다.
null 병합 연산자 포맷
-
??: value가 null이면, 실행문을 실행
- [value] ?? [실행문]
-
??=: value가 null이면, value에 데이터를 할당
- [value] ??= [데이터]
-
?.: value가 null이면, value의 멤버에 엑세스
- [value] ?. [멤버]
[?? - 예시 코드]
using System;
using static System.Console;
namespace nullCoalescingOperator
{
class Greeter
{
internal string Greet1(string name)
{
if (name == null)
{
return "Hello, stranger!";
}
return $"Hello, {name}";
}
internal string Greet2(string name) // ?? 연산자 사용
{
return $"Hello, {name ?? "stranger"}!";
}
}
internal class Program
{
static void Main(string[] args)
{
//var obj = new Greeter();
//WriteLine(obj.Greet1(null));
//Write(obj.Greet1("이동규"));
var obj = new Greeter();
WriteLine(obj.Greet2(null));
WriteLine(obj.Greet2("이동규"));
}
}
}
Hello, stranger!
Hello, 이동규
[??= - 예시 코드]
using System;
using System.Collections.Generic;
using static System.Console;
namespace nullCoalescingOperator
{
class Greeter
{
internal string Greet1(string name)
{
if (name == null)
{
return "Hello, stranger!";
}
return $"Hello, {name}";
}
internal string Greet2(string name)
{
return $"Hello, {name ?? "stranger"}!";
}
}
internal class Program
{
private static List<int> _numbers;
private static void AddToNumbers(int number)
{
//if(_numbers == null)
//{
// _numbers = new List<int>();
//}
//_numbers.Add(number);
(_numbers ??= new List<int>()).Add(number); // ??= 추가
}
static void Main(string[] args)
{
//var obj = new Greeter();
//WriteLine(obj.Greet1(null));
//Write(obj.Greet1("이동규"));
//var obj = new Greeter();
//WriteLine(obj.Greet2(null));
//WriteLine(obj.Greet2("이동규"));
AddToNumbers(10);
WriteLine(_numbers.Count);
AddToNumbers(20);
WriteLine(_numbers.Count);
}
}
}
1
2
[?. - 예시 코드]
using System;
using System.Collections.Generic;
using static System.Console;
namespace nullCoalescingOperator
{
class Greeter
{
internal string Greet1(string name)
{
if (name == null)
{
return "Hello, stranger!";
}
return $"Hello, {name}";
}
internal string Greet2(string name)
{
return $"Hello, {name ?? "stranger"}!";
}
}
internal class Program
{
private static List<int> _numbers;
private static void AddToNumbers(int number)
{
//if(_numbers == null)
//{
// _numbers = new List<int>();
//}
//_numbers.Add(number);
(_numbers ??= new List<int>()).Add(number); // ??= 추가
}
private static void ClearIfNotNull(List<int> numbers)
{
numbers?.Clear(); // ?. 추가
}
static void Main(string[] args)
{
//var obj = new Greeter();
//WriteLine(obj.Greet1(null));
//Write(obj.Greet1("이동규"));
//var obj = new Greeter();
//WriteLine(obj.Greet2(null));
//WriteLine(obj.Greet2("이동규"));
//AddToNumbers(10);
//WriteLine(_numbers.Count);
//AddToNumbers(20);
//WriteLine(_numbers.Count);
ClearIfNotNull(_numbers);
WriteLine(_numbers.Count);
}
}
}
1
2
0
[?? 복수 사용 - 예시 코드]
using System;
using static System.Console;
namespace nullCoalescingOperator1
{
class Person
{
public string Name;
public string LastName;
int Age;
}
internal class Program
{
static void Main(string[] args)
{
PrintName(new Person { Name = "동규", LastName = "이" });
PrintName(new Person { LastName = "정" });
PrintName(new Person());
}
static void PrintName(Person person)
{
WriteLine(person.Name ?? person.LastName ?? "stranger");
}
}
}
동규
정
stranger
댓글남기기