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

 

Discards - unassigned discardable variables

Describes C#'s support for discards, which are unassigned, discardable variables, and the ways in which discards can be used.

docs.microsoft.com