C #에서 이름이있는 값 튜플에 별칭을 정의 할 수 있습니까?


92

using 키워드를 사용하여 C #에서 별칭을 정의 할 수 있다는 것을 알고 있습니다 .

예 :

using ResponseKey = System.ValueTuple<System.Guid, string, string>;

그러나 값 튜플에 대한 새 구문을 사용하여 정의 할 수 있습니까?

using ResponseKey = (Guid venueId, string contentId, string answer);

이 구문은 작동하지 않는 것 같습니다. 그럴까요?


1
대답은 모르겠지만 "변수를 정의하기 위해 모듈 수준에서 var를 사용할 수 있습니까?"와 매우 비슷해 보입니다.
마리오 Vernari

이 수단을 컴파일하지 않는 경우가해야하지 작업
셀만 Genç

4
답은 모르겠지만 그 목적을 위해 클래스 나 구조체를 만드는 것이 더 나은 것 같습니다. 튜플은 좋지만 과용하지 마십시오.
Yeldar Kurmangaliyev

4
흥미로운 코멘트 @YeldarKurmangaliyev. 이것을 사용하는 이유는 객체에 대한 간단한 키로 사용하기 위해 모든 비교 가능한 인터페이스를 구현할 필요가 없기 때문입니다. 예, 게으르지 만 언어 기능을 최대한 사용하고 있습니다.
Nick Randell

3
@NickRandell-사람들 (다른 개발자)을 위해 소프트웨어를 작성하는 대부분의 경우 그들은 당신의 코드를 읽을 것입니다. 설명이 포함 된 이름을 가진 클래스와 속성을 갖는 것이 더 친근하고 효과적인 접근 방식입니다. 프로그래머가 코드 (자신과 다른 사람)를 설명하는 이름과 데이터 구조를 읽는 데 보내는 대부분의 시간은 시간을 절약 할 것입니다
Fabio

답변:



1

using다음과 같이 정의됩니다 : ( MSDN ).using identifier = namespace-or-type-name;

(Guid venueId, string contentId, string answer) 네임 스페이스도 아니고 (정규화 된) 유형 이름도 아닙니다.

그러나 나는 대부분 추측하고있다. 지금까지 C # 7.0이 존재한다는 사실조차 몰랐습니다.


1
이것이 C # 1.1의 사양입니다. C # 7.0에 대해 어떻게 증명합니까?
svick

1
나는 그것이 작동 할 것이라는 가정이 어떻게 나오는지 이해합니다. 똑같은 것을 만들 수 있었지만 옳지 않습니다. using은 유형의 별칭이 아닙니다. 그러나 유형 이름 또는 네임 스페이스 이름의 경우. 그리고 컴파일러 관련 기능은 기존 코드를 손상시키지 않고 변경할 수있는 마지막 기능입니다. 그래서 그들은 그것을 확장 할 수 없습니다. 그러나 위의 David Arno의 게시물에 훨씬 더 자세히 설명되어 있습니다. 더 잘 대답하기 때문에 내가 upvoted했습니다. 질문이 문제가되지 않게 만드는 중 ...
Christopher

2
@svick 문제는이 특정 구문이 "허용되어야하는"것인지 여부였습니다. 이것은 "아니요, C #의 첫 번째 버전 이후 유사한 구문이 허용되지 않았기 때문에 C # 개발자는이 특정 구문을 허용 할 의무가 없습니다."로 정답입니다. 더 넓은 질문은 모든 유형 표현식이에서 허용되어야하는지 여부입니다 using.
IllidanS4는 Monica 지원

1
@ IllidanS4이 답변이 말한 것이라면 정말 불분명합니다. 링크 된 사양이 오래되었거나 귀하가 만든 주장의 일부라는 것을 언급하지 않습니다.
svick

5
@Christopher 대답이 나쁘다고 생각되면 댓글을 달겠습니다. 답변이 얼마나 빨리 작성되었는지 또는 어떤 면책 조항이 있는지는 나에게 중요하지 않습니다. 그리고 귀하의 답변이 가치를 추가하지 않는다고 생각되면 삭제 비용을 느끼십시오. 또한 사람들이 정보에 입각 한 답변을 찾기 위해 여기에 오는 것 같아서 정보가없는 답변을 작성하기 전에 약간 생각해야할까요?
svick
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.