Programming/C# & Unity
C# discards (안쓰는 out var , 안쓰는 tuple 숨기기)
장형이
2022. 2. 8. 10:33
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