Tuple
- .NET 4.0
- 서로 다른 형식의 요소들을 튜플이라는 단이로 묶는 제네릭 클래스
- 각 클래스에는 Item1, Item2 등의 읽기 전용 속성들이 존재(형식 매개변수당 하나씩)
- 튜플은 한 메서드에서 둘 이상의 값을 돌려줄 때, 값 쌍들의 컬렉션을 만들 때 유용
튜플 대신 Object 배열을 사용 할 때의 단점
- 정적 형식 안정성이 사라짐
- 값 형식에 대해서 박싱/언박싱 비용 발생
- 컴파일러가 검증 할 수 없는 지저분한 캐스팅들이 끼어들게 된다.
튜플의 생성
- 생성자
- Tuple.Create (제네릭 형식 추론 가능)
반응형
튜플의 비교
- 튜플은 클래스이기 때문에 ==로 비교하면 참조 비교를 하게 됨
- 개별 요소를 비교하고 싶다면 Equals를 사용
- 둘째 인수로 상등 비교자를 받는 버전도 존재
using System;
namespace Practice
{
class Program
{
static void Main(string[] args)
{
// 생성자를 통한 튜플 생성
var t1 = new Tuple<int, string>(123, "Hello");
// 편의용 메서드 Tuple.Create를 이용한 생성
Tuple<int, string> t2 = Tuple.Create(456, "World");
// 편의용 메서드 Tuple.Create를 이용한 생성(제네릭 형식 추론)
var t3 = Tuple.Create(789, "!!!");
Console.WriteLine(t1);
Console.WriteLine(t1.Item1 * 2);
Console.WriteLine(t1.Item2.ToUpper());
Console.WriteLine();
// object 배열을 이용할 경우
object[] objectTuple = { 123, "Hello" };
Console.WriteLine(objectTuple);
Console.WriteLine(((int)objectTuple[0]) * 2);
Console.WriteLine(((string)objectTuple[1]).ToUpper());
Console.WriteLine();
// 튜플의 비교
var t4 = Tuple.Create(123, "Hello");
Console.WriteLine(t1 == t4);
Console.WriteLine(t1.Equals(t4));
}
}
}
반응형
'C#' 카테고리의 다른 글
[C#] 순서 비교 (IComparable<T>, IComparable) (1) | 2023.08.26 |
---|---|
[C#] 상등 비교 (IEquatable<T>) (0) | 2023.08.25 |
[C#] Guid (0) | 2023.08.24 |
[C#] Math (1) | 2023.08.23 |
[C#] 열거형과 System.Enum (1) | 2023.08.21 |
[C#] Random & RandomNumberGenerator (1) | 2023.08.20 |
[C#] Complex (1) | 2023.08.19 |
[C#] BigInteger (1) | 2023.08.18 |