1. is 연산자에 새로운 기능이 추가됐다.
기존에는 ==로만 가능했던게 is로도 가능하다고 한다. 근데 이게 가독성은 좋긴한데(이것도 잘 모르겠음,,) 다른 기능이 있나 찾아보니까 없다고 한다. 그냥 된다 정도만 알아두자.
if(str == null)
//이랑
if(str is null)
//이랑 같다.
2-1. 타입 패턴(Type Pattern)
이게 무엇인고 하니 기존에는 #1,2의 예제만 가능했는데 #3의 예제를 사용해서 더 편리해졌다 이건 좀 유용할듯 하다.
#기존코드 1
if (animal is Dog)
{
((Dog)animal).Bark();
}
#기존 코드 2
Dog dog = animal as Dog;
if (dog != null)
{
dog.Bark();
}
#새로운 기능 !!!
if (dog is Animal animal)
{
animal.Bark();
}
2-2. 상수 패턴(Const pattern)
맨 처음에 설명한 1번의 예제와 동일한데, 이름이 상수 패턴이라고 한다.
//예제 1
object[] data = { "", 1, 3,4, new Monster() };
foreach (var item in data)
{
if (item == null) //-> 원래는 == 로만 가능했다.
{
Console.WriteLine("NULL");
}
else if (item is 3) //이제는 is로 표현이 가능하다!
{
Console.WriteLine("3");
}
}
2-3. var 패턴(Var Pattern)
var의 기능 자체가 타입을 컴파일러가 추론해서 실행하는 것인데 이 기능을 is연산자와 결합해서 아래와 같은 방식으로 코딩이 가능하다고 한다! 이것도 꽤나 유용할듯하다.
object obj = 123;
if (obj is var value)
{
Console.WriteLine("타입: " + value.GetType());
Console.WriteLine("값: " + value);
}
//결과적으로 int32와
//값 123이 출력된다!
3.활용(switch문)
위의 기능들은 주로 switch문에서 유용하다.
//예제1
switch (obj) //오브젝트가 switch문에 들어갈 수 있다!
{
case string str://이런식으로 str이 사용이 가능하다!
Console.WriteLine($"Length of the string is {str.Length}");
break;
case int i: //이런식으로 i가 사용이 가능하다!
Console.WriteLine($"The number is {i}");
break;
}
//예제 2
switch (input)
{
case "hello" when i == 5: //i == 5라는 조건을 추가로 제시할 수 있다! when이 먼저 계산된다.
Console.WriteLine("Hello, five letters!");
break;
case "hello": //중복된다.
Console.WriteLine("Hello!");
break;
}
//예제 3
switch (obj)
{
case int i:
Console.WriteLine($"The number is {i}");
break;
case var o: //var 패턴 사용 o의 타입을 추론해서 Name이라는 메서드를 호출했다.
Console.WriteLine($"Unknown type: {o.GetType().Name}");
break;
}
'프로그래밍 언어 > c#' 카테고리의 다른 글
C#7.0 ref local, return, struct, Throw expression (0) | 2023.04.29 |
---|---|
c#7.0 Tuple, Local Function, out, binary literal, Deconstructor (0) | 2023.04.29 |
c# yield, nullable, 전처리기, 인덱서, Anonymous, Extension,partial, dynamic (0) | 2023.04.28 |
C# 6.0 정리 (1) | 2023.04.24 |
C# abstract class, Interface (0) | 2023.04.24 |