私は以下のようにタプルを定義したとします。c# - どのようにタプルへのポインタを持っていますか?
public Tuple<string, string> CValues = new Tuple<string, string>("abc", "def");
上記のタプルへのポインタとして機能する別の変数を定義するにはどうすればよいですか?これを達成する方法はありますか?
私は以下のようにタプルを定義したとします。c# - どのようにタプルへのポインタを持っていますか?
public Tuple<string, string> CValues = new Tuple<string, string>("abc", "def");
上記のタプルへのポインタとして機能する別の変数を定義するにはどうすればよいですか?これを達成する方法はありますか?
.Net Tuple
は、変更不可能な参照クラスです。基本的には既に基本的にはポインタに相当し、値を変更する方法はありません。新しいものを作成することしかできません。
CValues
が
"abc_x"
と
"def_y"
を保持しているが、それは実際に新しいインスタンスの後にあなたが...新しいインスタンスが割り当てられていることを確認するために
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")
}
をref
キーワードを使用することができます
から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!
タプルは構造体ではないクラスです。したがって、変数はポインタです。
私の質問は、別の名前でこれに別のポインタをしたいのですが? 'public Tuple <文字列、文字列> ptr = CValues; '仕事? – Rama
[* references *](https://msdn.microsoft.com/en-us/library/490f96s2.aspx)と[* pointers *](https://msdn.microsoft)の両方を持つC#などの言語では、 .com/en-us/library/y31yhkeb.aspx)、これらのうちの1つに*間違った名前を使用することは、常に避けるべきです。変数は* reference *です。 –
@Rama:私は優れた方法を知っています:試してみてください。なぜあなたはそのプログラムの断片が何をしているのか尋ねていますか?コードを記述して実行すると、そのコードが何をしているのかがわかります。 –
:あなたは本当にその後、可変インスタンスをしたい場合は
独自のクラスを作成することができますか? – Candide
'CValuesReference'は「参照」ではありませんか?あなたは、 'var whatever = CValuesReference'のようなものが欲しいということですか? –
はいあなたは正しい@Maciej – Rama