본문 바로가기
프로그래밍/C#

C# 7.0 튜플(Tuple)

by bantomak 2023. 7. 27.

튜플이란?

C# 7 이전 버전에서는 메서드에서 하나의 값만을 리턴할 수 있었지만, C# 7부터는 튜플(Tuple)을 사용하여 메서드로부터 복수 개의 값들을 리턴할 수 있게 되었다.

 

메서드 원형을 정의할 때 리턴타입이 복수 개이므로 튜플 리턴 타입(tuple return type) 표현식을 사용하게 되는데, 이는 괄호 ( ) 안에 여러 리턴타입을 순서대로 나열하면 된다. 예를 들어, int 2개와 double 하나를 리턴할 경우 (int, int, double)과 같이 표현할 수 있으며, 더 나아가 편의를 위해 각 리턴타입마다 이름을 지정할 수도 있다. 예를 들어 (int count, int sum, double average)와 같이 작성이 가능하다.

 

예제 코드

(double, int) t1 = (4.5, 3);
Console.WriteLine($"Tuple with elements {t1.Item1} and {t1.Item2}.");
// Output:
// Tuple with elements 4.5 and 3.

(double Sum, int Count) t2 = (4.5, 3);
Console.WriteLine($"Sum of {t2.Count} elements is {t2.Sum}.");
// Output:
// Sum of 3 elements is 4.5.

 

실제 사용 예제

private (eFile srcFile, int srcRank, eFile dstFile, int dstRank) InputDecoder(string input)
{
    Func<char, eFile> fileDecoder = file =>
    {
        return file switch
        {
            'a' => eFile.a,
            'b' => eFile.b,
            'c' => eFile.c,
            'd' => eFile.d,
            'e' => eFile.e,
            'f' => eFile.f,
            'g' => eFile.g,
            'h' => eFile.h,
            _ => throw new ArgumentException($"invalid input. {input}"),
        };
    };

    var file = fileDecoder(input[0]);
    var newFile = fileDecoder(input[2]);

    if (!int.TryParse(input[1].ToString(), out var rank))
    {
        throw new ArgumentException($"invalid input. {input}");
    }

    if (!int.TryParse(input[3].ToString(), out var newRank))
    {
        throw new ArgumentException($"invalid input. {input}");
    }

    return (file, rank, newFile, newRank);
}

 

참조 사이트

 

C# 7.0 튜플 - C# 프로그래밍 배우기 (Learn C# Programming)

C# 7.0 튜플 C# 7 이전 버전에서는 메서드에서 하나의 값만을 리턴할 수 있었지만, C# 7 부터는 튜플(Tuple)을 사용하여 메서드로부터 복수 개의 값들을 리턴할 수 있게 되었다. 메서드 원형을 정의할

www.csharpstudy.com

'프로그래밍 > C#' 카테고리의 다른 글

C# Closure 이해하기  (22) 2023.08.02
C# 무명 메서드(Anonymous Method)  (4) 2023.08.02
C# Queue 기본 생성자로 초기화 하기  (18) 2023.07.26
C# virtual 키워드  (24) 2023.07.05
C# 식 본문 멤버(Expression-bodied member)  (4) 2023.06.28

댓글