2013-03-04 3 views
-1

у меня есть ниже код:Присвоение значений словаря массива отменяет существующие значения

Dictionary<string, string>[] Records = new Dictionary<string, string>[2];   
Dictionary<string, string> newFields = new Dictionary<string, string>(); 

newFields["Item"] = "M1"; 
newFields["Value"] = "V1"; 

Records[0] = newFields; 

newFields["Item"] = "M2"; // This also changes values in Records[0] 
newFields["Value"] = "V2"; 

Records[1] = newFields; 

Но как только я снова назначить newFields, он также изменяет значения в отчетах [0] ???????? ??????

+3

Вы должны прочитать на ссылочных типов. – svick

ответ

4

Это потому, что вы подтверждаете ссылку newFields на номер Records[0]!

Попробуйте это:

/* .... */ 

Records[0] = new Dictionary<string, string>(newFields); 

/* .... */ 
3

Records[0] = newFields; передает ссылку, а не копию этого словаря. Вот почему и Records[0], и newFields указывают на тот же объект.

Чтобы сделать копию существующего экземпляра Dictionary использовать что:

Records[0] = new Dictionary<string, string>(newFields); 
Смежные вопросы