본문 바로가기
C# 기술

[C#] Tuple 사용 방법

by bryan.oh 2021. 6. 1.
반응형

 

먼저 예제로~ (아래쪽엔 설명)

예제  - Tuple 을 리턴하는 메소드

private (bool isValid, string hh, string mm) getControlValues()
{
    if (comboBox_hh.SelectedItem == null || comboBox_mm.SelectedItem == null)
    {
        MessageBox.Show("Time is required.");
        return (false, "", "");
    }

    string hh = comboBox_hh.SelectedItem.ToString();
    string mm = comboBox_mm.SelectedItem.ToString();

    return (true, hh, mm);
}

메소드 리턴 타입을 ( ) 안에 타입과 함께 변수명을 지정해줍니다.

(bool isValid, string hh, string mm)

return 을 그 타입에 맞게 리턴합니다.

return (true, hh, mm);

 

사용 - 위에서 생성한 메소드

private void addSchedule()
{
    var tuple = getControlValues();  // 위에서 생성했던것
    if (tuple.isValid)
    {
        if (mForm.getMainDbHelper().addSchedule(tuple.hh, tuple.mm) > 0)
            mForm.doAfterScheduleUpdated();
        else
        {
            string sqlErr = mForm.getMainDbHelper().getLastErrMessage();
            if (!String.IsNullOrEmpty(sqlErr))
                MessageBox.Show(mForm.getMainDbHelper().getLastErrMessage());
            else
                MessageBox.Show("already exists.");
        }
    }
}

 

메소드에서 리턴 받아온 tuple 은 메소드의 리턴타입에 정의된 변수명으로 사용 가능합니다.

 


공식 문서 설명 요약

튜플 선언

(double, int) t1 = (4.5, 3);
t1.Item1 // 4.5
t1.Item2 // 3

// 또는

var t = (Sum: 4.5, Count: 3);
t.Sum // 4.5
t.Count // 3

// 또는

var sum = 4.5;
var count = 3;
var t = (sum, count);
t.sum // 4.5
t.count // 3
// 명시적으로 tuple 을 변수명을 지정하지 않아도 필드이름에서 유추됨.

 

튜플 비교

  • 요소가 같아야함
  • 요소 명은 관련없음. 순서가 중요
(int a, byte b) left = (5, 10);
(long a, int b) right = (5, 10);
Console.WriteLine(left == right);  // output: True
Console.WriteLine(left != right);  // output: False

var t1 = (A: 5, B: 10);
var t2 = (B: 5, A: 10);
Console.WriteLine(t1 == t2);  // output: True
Console.WriteLine(t1 != t2);  // output: False

 

튜플과 System.Tuple 차이

System.ValueTuple 형식으로 지원되는 C# 튜플은 System.Tuple 형식으로 표현되는 튜플과 다릅니다. 주요 차이점은 다음과 같습니다.

  • ValueTuple 형식은 값 형식입니다. Tuple 형식은 참조 형식입니다.
  • ValueTuple 형식은 변경할 수 있습니다. Tuple 형식은 변경할 수 없습니다.
  • ValueTuple 형식의 데이터 멤버는 필드입니다. Tuple 형식의 데이터 멤버는 속성입니다.

 

 

728x90
반응형

댓글