ShovelingLife
A Game Programmer
ShovelingLife
전체 방문자
오늘
어제
  • 분류 전체보기 (1067) N
    • 그래픽스 (57)
      • 공통 (19)
      • 수학 물리 (22)
      • OpenGL & Vulkan (1)
      • DirectX (14)
    • 게임엔진 (180) N
      • Unreal (69)
      • Unity (100) N
      • Cocos2D-X (3)
      • 개인 플젝 (8)
    • 코딩테스트 (221)
      • 공통 (7)
      • 프로그래머스 (22)
      • 백준 (162)
      • LeetCode (19)
      • HackerRank (2)
      • 코딩테스트 알고리즘 (8)
    • CS (235)
      • 공통 (21)
      • 네트워크 (44)
      • OS & 하드웨어 (55)
      • 자료구조 & 알고리즘 (98)
      • 디자인패턴 (6)
      • UML (4)
      • 데이터베이스 (7)
    • 프로그래밍 언어 (346)
      • C++ (167)
      • C# (88)
      • Java (9)
      • Python (33)
      • SQL (30)
      • JavaScript (8)
      • React (7)
    • 그 외 (9)
      • Math (5)
      • 일상 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Source Code 좌측 상단에 복사 버튼 추가 완료
  • 언리얼 엔진 C++ 빌드시간 단축 꿀팁
  • 게임 업계 코딩테스트 관련
  • 1인칭 시점으로 써내려가는 글들

인기 글

태그

  • 백준
  • string
  • C++
  • 알고리즘
  • 클래스
  • 유니티
  • 문자열
  • 함수
  • 포인터
  • 배열
  • 파이썬
  • 그래픽스
  • SQL
  • 프로그래머스
  • c#
  • 언리얼
  • C
  • 티스토리챌린지
  • Unity
  • 오블완

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ShovelingLife

A Game Programmer

프로그래밍 언어/C#

[C#] 7.0 튜플 (Tuple)

2025. 2. 9. 14:42

개념

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);
}

 

https://jettstream.tistory.com/154

저작자표시 (새창열림)

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

[C#] Enum에 Name List / Value List 가져오기  (0) 2025.05.01
[C#] switch문에 추가된 기능 (버전 7~9)  (0) 2025.02.03
[C#] default와 new() 제약 조건 사용하기  (0) 2024.12.16
[C#] Attribute : Obsolete - 더 이상 사용하지 않거나 그럴 예정인 코드에 대해서  (0) 2024.12.16
[C#] IsNullOrEmpty와 IsNullOrWhiteSpace의 차이점  (0) 2024.11.10
    '프로그래밍 언어/C#' 카테고리의 다른 글
    • [C#] Enum에 Name List / Value List 가져오기
    • [C#] switch문에 추가된 기능 (버전 7~9)
    • [C#] default와 new() 제약 조건 사용하기
    • [C#] Attribute : Obsolete - 더 이상 사용하지 않거나 그럴 예정인 코드에 대해서
    ShovelingLife
    ShovelingLife
    Main skill stack => Unity C# / Unreal C++ Studying Front / BackEnd, Java Python

    티스토리툴바