아래와 같이 튜플을 정의했다고 가정합니다.- 튜플에 대한 포인터를 갖는 방법?
public Tuple<string, string> CValues = new Tuple<string, string>("abc", "def");
위 튜플에 대한 포인터 역할을하는 다른 변수를 어떻게 정의합니까? 이것을 달성 할 수있는 방법이 있습니까?
아래와 같이 튜플을 정의했다고 가정합니다.- 튜플에 대한 포인터를 갖는 방법?
public Tuple<string, string> CValues = new Tuple<string, string>("abc", "def");
위 튜플에 대한 포인터 역할을하는 다른 변수를 어떻게 정의합니까? 이것을 달성 할 수있는 방법이 있습니까?
.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!
튜플은 구조체가 아닌 클래스입니다. 따라서 변수는 포인터입니다.
내 질문은 다른 이름으로 다른 포인터를 원한다면 어떻게 할까? Will'public Tuple
[* references *] (https://msdn.microsoft.com/en-us/library/490f96s2.aspx)와 [* pointers *] (https://msdn.microsoft)가 모두있는 C#과 같은 언어입니다. .com/en-us/library/y31yhkeb.aspx) 중 하나에 * 잘못된 * 이름을 사용하면 항상 피해야합니다. 변수는 * reference *입니다. –
@Rama : 알아내는 훌륭한 방법을 알고 있습니다. 시도해보십시오. 그 프로그램 조각이 무엇을하고 있는지 왜 묻고 있습니까? 코드를 작성하고 실행하면 그 코드가 무엇을하는지 알 수 있습니다. –
: 당신이 정말로 후 변경 가능한 인스턴스를 원하는 경우
당신은 당신의 자신의 클래스를 만들 수 있습니까? – Candide
'CValuesReference'는 "참조"가 아닌가요? 당신은 당신이 그런 것을 원한다는 것을 의미합니다 :'var whatever = CValuesReference'? –
예 @maciej 맞습니다. – Rama