Рассмотрим следующий код С#:
var d = new Dictionary<int, int>();
d[0] = 0;
d[0]++;
Каково значение d [0] после выполнения этого кода? Я ожидал бы d [0] == 0, потому что свойство Item словаря < > возвращает тип значения int
, предположительно в стеке, который затем увеличивается. Удивительно, однако, когда вы действительно запускаете этот код, вы найдете d [0] == 1.
Приведенный выше пример ведет себя так, как если бы индексчик возвращал ссылочный тип, но теперь рассмотрим следующее:
var d = new Dictionary<int, int>();
d[0] = 0;
var a = d[0];
a++;
Каково значение d [0] после выполнения этого кода? На этот раз мы получим d [0] == 0, как и ожидалось, поэтому индексатор определенно не возвращает ссылку.
Кто-нибудь знает, почему мы видим это поведение?