Это упрощенный код, почему все данные списка Tuple
в моем словаре dict (кроме ключей) очищаются, когда я вызываю метод item.Clear()
? Я не могу поместить параметр элемента в цикл for, так как это часть гораздо более сложного вложенного цикла.
var dict = new Dictionary<string, List<Tuple<string, string>>>();
var item = new List<Tuple<string, string>>();
for (int i = 0; i < 5; i++)
{
item.Add(new Tuple<string, string>("key1", $"itemKey{i.ToString()}"));
item.Add(new Tuple<string, string>("key2", $"itemKey{i.ToString()}"));
item.Add(new Tuple<string, string>("key3", $"itemKey{i.ToString()}"));
item.Add(new Tuple<string, string>("key4", $"itemKey{i.ToString()}"));
dict.Add($"dictKey{i.ToString()}", item);
item.Clear();
}
item
в словарь, а затем очищаетеitem
. Почему бы вместо этого не установитьitem
в новую ссылку? - person   schedule 10.04.2019string
больше типом значения или меньше ссылочным типом? Сказав это, я был бы более чем счастлив сравнить количество ссылочных типов, которые фактически используются для сравнения равенства, которые используют свою ссылку в качестве своей идентичности, с теми, которые используют значения внутри типа для своей идентичности. . Я почти никогда не видел, чтобы ссылка фактически использовалась в качестве идентификатора для целей равенства. Он используется только методамиEquals
типов, которые фактически не сравниваются на равенство, потому что это значение по умолчанию. - person Servy   schedule 10.04.2019string
семантику ссылки или значения. То, что я думаю, что количество ссылочных типов, которые используют семантику равенства для равенства, является обычным явлением, не меняет того факта, что все они по-прежнему имеют ссылочную семантику и что переменные типа значения имеют семантику значения. То, как тип определяет равенство, не имеет отношения к тому, являются ли переменные этого типа ссылками или значениями. Что, конечно, было целью с самого начала. Меня не волнует, считаете ли вы, что тип редко использует свои значения для равенства, поскольку это не является важным моментом. - person Servy   schedule 10.04.2019