Дело уж точно не в том где вы храните данные - массив, словарь, список, а в том что храните и как этим манипулируете.
Допустим имеете дело с классом
public class Point{
public int X{ get; set;}
public int Y{ get; set;}
}
var points = new Point[1];
var point = new Point();
points[0] = point; // points[0] и point указывают на один и тот же объект
points[0].X = 10; // point.X == 10
Потому, что класс это ссылочный (мутабельный - тоже имеет значение) тип данных
Другой пример:
public struct StructPoint{
public int X{ get; set;}
public int Y{ get; set;}
}
var point = new StructPoint();
points[0] = point; // points[0] и point имеют одинаковое значение! т.е. (points[0] == point) но ссылаются на разные области памяти
points[0].X = 10; // point.X == 0
Потому, что структура это значимый тип данных
Для строк, поведение будет примерно как для структур хотя они ссылочные. Потому что строки иммутабельные, когда меняется строка на самом деле создается новая.
https://metanit.com/sharp/tutorial/2.16.php