Re: Передача List<> по значению
От: Konstantin.Nizhegorodov Россия  
Дата: 16.11.07 23:22
Оценка:
Здравствуйте, Invisible_Kid, Вы писали:

I_K>... Мне необходимо передать Лист своих классов методу другого класса таким образом, чтобы значение элементов внутри метода менялось, а снаружи оставалось таким же, ...

I_K>
I_K>static void Main(string[] args)
I_K>{
I_K>    List<Class4List> test = new List<Class4List>(); //создаём Лист наших классов
I_K>    Class4List qwer = new Class4List(); //создаём экземпляр такого же класса
I_K>    qwer.var = 25; //в нём присваиваем какое-то значение члену класса
I_K>    test.Add(qwer); //добавляем в наш Лист
I_K>    Class4Method tst = new Class4Method(); //создаём экземпляр класса с методом, которому нужен Лист
I_K>    tst.changeVar(new List<Class4List>(test)); //и вызываем этот метод, передавая ему копию нашего Листа
I_K>}
I_K>

I_K>В результате и у test[0].var будет значение 1, и у qwer.var тоже, что говорит о том, что значение элементов Листа передаётся по ссылке. Как передать их по значению?

Вам нужно сделать копию элементов коллекции, поля и свойства которых вы хотите изменять, не изменяя оригиналы.
В Вашем гипотетическом случае:
static void Main(string[] args)
{
List<Class4List> test = new List<Class4List>(); //создаём Лист наших классов
Class4List qwer = new Class4List(); //создаём экземпляр такого же класса
qwer.var = 25; //в нём присваиваем какое-то значение члену класса
test.Add(qwer); //добавляем в наш Лист
Class4Method tst = new Class4Method(); //создаём экземпляр класса с методом, которому нужен Лист
tst.changeVar(new List<Class4List>(new List<Class4List>(test))); //и вызываем этот метод, передавая ему копию нашего Листа
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.