2016-06-16 6 views
1

私のタイトルの質問は絶対に私の質問に答えていないことがthis question辞書は、パラメータとして渡されたときに、

と同じ値を失います。

static void Main() { 
    Dictionary<string,int> d=new Dictionary<string,int>(); 
    d["asu"]=1; 
    d["babi"]=1; 
    c(d); 
    Console.Write(d["asu"]); 
    //output=0 
} 
static void c(Dictionary<string,int> d){ 
    d["asu"]--; 
} 

上記のコードは、それだけc()メソッド内の値を減少させるべきであり、あまりにもMain方法内側減少はならない場合、Main方法内側d変数の値を減少させます。 DictionaryMainメソッドに保持する方法は、渡されたパラメータによって値が減少しないようにします。

+0

[profanity](http://meta.stackexchange.com/questions/22232/are-expletives-cursing-swear-words-or-vulgar-language-allowed-on-se-sites)を削除してください – Martheen

答えて

5

Dictionaryは参照型です。データを渡すときにデータのコピーを作成していません。同じ基本オブジェクトに参照を渡すだけです。

コピーを変更する場合は、明示的にコピーを作成する必要があります。試してみてください。

var copy = d.ToDictionary(t=>t.Key, t=>t.Value); 
+0

これは正しい。ディクショナリは参照型です。 dへの参照を関数cに渡すことによって、元のdを変更する力を与えます。これが起こらないようにするには、辞書の新しいコピーを明示的に作成する必要があります。 –

3

をそれ以外の場合は

c(new Dictionary<string, int>(d)); 

cのメソッドに渡す前に、辞書のコピーを作成し、変数が同じオブジェクトを指しています。

関連する問題