2016-06-23 3 views
0

아래와 같이 튜플을 정의했다고 가정합니다.- 튜플에 대한 포인터를 갖는 방법?

public Tuple<string, string> CValues = new Tuple<string, string>("abc", "def"); 

위 튜플에 대한 포인터 역할을하는 다른 변수를 어떻게 정의합니까? 이것을 달성 할 수있는 방법이 있습니까?

+1

: 당신이 정말로 후 변경 가능한 인스턴스를 원하는 경우

당신은 당신의 자신의 클래스를 만들 수 있습니까? – Candide

+2

'CValuesReference'는 "참조"가 아닌가요? 당신은 당신이 그런 것을 원한다는 것을 의미합니다 :'var whatever = CValuesReference'? –

+0

예 @maciej 맞습니다. – Rama

답변

2

.Net Tuple은 불변 참조 클래스입니다. 기본적으로 이미 포인터와 같으며 값을 변경할 수있는 방법이 없습니다. 새 값만 만들 수 있습니다.

당신은 새로운 인스턴스를 할당하기 위해 ref 키워드를 사용할 수 있습니다

...

var CValues = new Tuple<string, string>("abc", "def"); 

void ChangeCValues(ref Tuple<string, string> input) 
{ 
    values = new Tuple<string, string>(input.Item1 + "_x", input.Item2 + "_y") 
} 

CValues"abc_x""def_y" 보유하고 있지만, 실제로는 새로운 인스턴스의 후 - ref 키워드가 그 보장 외부 참조가 업데이트됩니다.

당신이 동일한 인스턴스를 가리 킵니다 CValues에 다른 변수를 할당하지만, 재 할당이 또 다른 ...

var altValues = CValues; 
// altValues.Item1 will be "abc" 

ChangeCValues(ref altValues); 
// altValues.Item1 will be "abc_x", but CValues.Item1 will be "abc" 

당신이 뭘 하려는지를 가리 경우? 당신이 뭘 하려는지

class MyMutableTuple<T1, T2> { 
    public T1 Item1 {get; set;} 
    public T2 Item2 {get; set;} 
} 

var CValues = new MyMutableTuple<string, string>("abc", "def"); 

CValues.Item1 = "ghi"; // Works! 
+0

이 답변은 저에게 많은 오해를 해소했습니다.내 의심의 여지가 지금은'CValues'에 포함 된 값을 'altValues'를 사용하여 ref를 사용하지 않고 변경할 수 있습니까? – Rama

+0

@Rama 'CValues'에 포함 된 값을 변경할 수 없습니다 - 새로운 '튜플'을 만들고 할당 할 수 있지만 값을 변경할 수는 없습니다. – Keith

+0

그래, 알았다. 그러나 새로운 튜플을 만들고 그것을 'altValues'에 대입하면'CValues'가 바뀌지 않을까요? 그게 내 문제 야. – Rama

0

튜플은 구조체가 아닌 클래스입니다. 따라서 변수는 포인터입니다.

+0

내 질문은 다른 이름으로 다른 포인터를 원한다면 어떻게 할까? Will'public Tuple ptr = CValues; '일해? – Rama

+0

[* references *] (https://msdn.microsoft.com/en-us/library/490f96s2.aspx)와 [* pointers *] (https://msdn.microsoft)가 모두있는 C#과 같은 언어입니다. .com/en-us/library/y31yhkeb.aspx) 중 하나에 * 잘못된 * 이름을 사용하면 항상 피해야합니다. 변수는 * reference *입니다. –

+0

@Rama : 알아내는 훌륭한 방법을 알고 있습니다. 시도해보십시오. 그 프로그램 조각이 무엇을하고 있는지 왜 묻고 있습니까? 코드를 작성하고 실행하면 그 코드가 무엇을하는지 알 수 있습니다. –

관련 문제