Объекты в C # являются ссылочными типами. Когда вы создаете новый объект, .net отправляет и выделяет память для этого объекта в куче, сама переменная по сути является указателем на этот объект.
Список, «универсальный контейнер», содержит список ссылок на объекты, а не сами объекты. Когда вы получаете объект из списка, то есть: var x = list [10], вы на самом деле просто получаете ссылку на тот же объект, на который ссылается список. Изменяя объект, изменение также будет отражено в объекте, содержащемся в списке.
Чтобы «изменить объект вне списка», и чтобы это изменение не отображалось на объекте внутри списка, вам нужно будет сделать копию этого объекта; Есть несколько способов сделать это, в зависимости от того, чем на самом деле является ваш объект.
Ради этого примера, если вы решите использовать тип структуры вместо базового «объекта», вы испытаете поведение, которое ищете. Структура в c # не является ссылочным типом.
Надеюсь, я вас больше не смутил?
Прочитав ваш комментарий, попробуйте что-то вроде этого.
List<object> list2 = new List<object>();
for(int i = 0; i < 1000; i++)
{
List<object>list1 = new List<object>();
for(int j = 0; j< 1000; j++)
{
list1.Add( "something" + j);
}
list2.Add(list1);
}
Выше будет создан список, содержащий 1000, списки длиной 1000.