C#에서 Parameter를 Out으로 받지만 호출자는 사용할 필요 없는 경우가 존재한다.
public void Main()
{
string str = "abc";
if (int.TryParse(str, out var intResult) == false) // intResult는 쓸모가 없음.
{
Console.WriteLine("이것은 int 다.");
return;
}
if (float.TryParse(str, out var floatResult) == false) // floatResult는 쓸모가 없음.
{
Console.WriteLine("이것은 float 이다.");
return;
}
Console.WriteLine("Parse가 가능하다.");
}
위와 같은 경우 intResult나 floatResult는 필요 없는데 아래와 같이 수정하면 out 키워드를 그대로 쓸 수 있으면서 쓸모없는 변수를 죽일 수 있다.
public void Main()
{
string str = "abc";
if (int.TryParse(str, out _) == false) // _는 변수가 아니라서 밑에서 계속 쓸 수 있다.
{
Console.WriteLine("이것은 int 다.");
return;
}
if (float.TryParse(str, out _) == false)
{
Console.WriteLine("이것은 float 이다.");
return;
}
Console.WriteLine("Parse가 가능하다.");
}
이 기능을 discards 라고 부르는 건가 본데 ValueTuple을 사용할 때도 쓸 수 있다.
public (bool, string) DoTest()
{
return (true, "Hello world!");
}
public void Main()
{
var (_, stringResult) = DoTest(); // bool은 버리고 string만 쓰자.
Console.WriteLine(stringResult);
}
Tuple 버리는건 잘 모르겠는데, out var 버리는 건 유용하게 쓸 수 있을 듯.
참고 : https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/functional/discards
'Programming > C# & Unity' 카테고리의 다른 글
C# Enum Flag (2) | 2022.09.16 |
---|---|
C# DateTime.Now 속도 (0) | 2022.07.13 |
C# 가비지 컬렉션 루트 오브젝트 (GC root object) (0) | 2021.10.31 |
C# Tuple, ValueTuple (0) | 2021.09.03 |
C# 게임 서버 (.net core) 장단점 (4) | 2021.02.15 |