2014-12-18 3 views
6

튜플이 클래스와 다른 점은 무엇입니까? 다음 코드 대신에 3 개의 필드를 가진 클래스를 만들고 거기에서 객체를 만들 수 있습니다. 이 튜플은 어떻게 다른가? 튜플의 항목을 변경할 수 없다는 사실을 감안할 때 우리가 작성한 코드 만 줄이거 나 속도와 관련이 있습니다.튜플은 클래스와 어떻게 다른가요?

Tuple<int, string, bool> tuple = new Tuple<int, string, bool>(1, "cat", true); 
+2

언급할만한 가치가있는 속성은 게터 일 뿐이므로 속성을 만든 후에는 속성을 변경할 수 없습니다. – Default

+0

튜플은 패턴 매칭이 언어의 큰 부분을 차지하고 구문이 개념을 중심으로 구축되는 F #에서 많은 유용성이 있다는 점에 유의해야합니다. http://msdn.microsoft.com/en-us/ 라이브러리/dd233200.aspx. –

+2

[소스 코드] (http://referencesource.microsoft.com/#mscorlib/system/tuple.cs,ec6128d1b3907918)도 확인할 수 있습니다. –

답변

13

사용자 정의 속성으로 새 클래스를 정의하지 않아도됩니다.

그것은 는 베어 본 클래스는 사용자 지정 코딩없이 할 것이 뭔가있는 세 가지 항목의 값에 의해 평등을 정의한다. 그게 불변이라는 사실은 Dictionary에있는 해시 키에 대한 합리적인 후보가된다.

한 가지 단점은 속성 등 바닐라 Item1, Item2, 있다는 것입니다, 그래서 그들은 그 안에 값, ID, Name, Age 같은 속성을 것 어떤 컨텍스트를 제공하지 않습니다.

+1

좋은 '사전'키로 생각하지 않았을 것입니다. 물론, 당신은 그것과 비교할 새로운 * 하나를 만들어야 만합니다 ... – BradleyDotNET

+1

'GetHashCode'와 'Equals' 구현 상자 때문에 값 유형을 포함하는'Tuple'은 실제로 키로 사용하기에는 열악합니다 각 값에 포함 된 값! 자세한 내용은 [이 질문] (http://stackoverflow.com/questions/21084412/net-tuple-and-equals-performance)을 참조하십시오. – Lukazoid

+1

@ 루카 조이 페어 포인트 (Lukazoid Fair point),하지만 나는 그것을 _ 퍼포먼스 _와 비교하여 키로 사용하는 것과 비교했다. 확실하게 그것은 가장 연기자가 아니지만, "믿을 수 없을만큼 가난한"것은 과장된 IMHO입니다.사용법에 따라 중요하지 않을 수 있습니다. –

10

Tuple 클래스입니다. 원하는 데이터 (예 : Item1과 같이 몹시 명명 된 속성)를 보유하고있는 하나.

은 코드를보다 읽기 쉽고 유지하기 쉽도록 클래스를 만들어야합니다. 주요 기능은 데이터를 보유 할 클래스를 만들지 않고 데이터 조각을 연결하려는 경우 "빠른 수정"입니다.

+1

동의 함, 일반적으로 사용하지 않아야합니다. 지역 변수의 경우 익명 유형을 대신 사용할 수 있습니다. 주위를 둘러싼 것들을 위해 별도의 유형을 만드는 것이 좋습니다. – MarcinJuraszek

4

튜플은 제 생각에 잘못된 데이터 모델링에 대한 초대장입니다. 적절한 모델을 만드는 대신 n 개의 항목 속성을 보유 할 수있는 일반 개체를 얻습니다. 네이밍은 매우 일반적인 것입니다. Item1..ItemN

+1

익명의 유형이 발명되기 전에는 수명이 짧은 물건에 대해서는 의미가 있다고 생각합니다. –

+0

@JonathanAllen 익명 형식이 '튜플 (Tuple)'보다 길다는 것을 제외하고는. –

+0

네, 그건 역사에 주름을 둡니다. –

1

새 클래스를 정의하지 않고도 메소드 호출간에 데이터를 전달하기 위해 Tuples를 사용합니다. 일반적으로 "out"매개 변수를 사용하는 대신 메서드에서 여러 데이터를 반환하는 데 사용합니다.

out 매개 변수는 async/await 메서드와 함께 사용할 수 없다는 점에 유의하십시오. 튜플이 유용 할 수 있습니다.

재사용 가능한 클래스 라이브러리를 코딩하는 경우 데이터 클래스를 정의하고 싶을 것입니다. 그러나 튜플은 표현 레이어에서 훌륭합니다.

관련 문제