Возврат объекта List из метода

Рейтинг: 1Ответов: 2Опубликовано: 04.03.2015

Как правильно возвращать объект List из метода? Если просто сделать List выходным параметром, не получится ли операция слишком тяжелой за счет копирования значений локальной переменной метода наружу?

Ответы

▲ 2Принят

Если вы генерируете список внутри некоего метода, то best practices предлагают делать так:

public void DoSomeWork()
{
    List<Double> someList = new List<Double>();
    // fill someList with values
    int someInt = (new Random).Next();
    Dictionary<Double,Double> someDict = calc_distribution(someList, someInt);
}

Т.е. вы сначала не инициализируете ваш Dictionary нуллом или пустым словарем, т.е. избавляетесь от лишних проверок или переприсваивания.

А вот если вам нужно изменить уже имеющийся словаре someDict, как он указан в моём примере, то имеет смысл передавать его по ссылке в метод. Подробнее почитать можно тут: Передача аргумента по ссылке - ref

▲ 1

Лист хранит в себе ссылки на объекты, а не сами объекты. Поэтому каким бы большим у вас лист ни был, копирования локальных переменных "наружу", т.е. создание новых экземпляров-копий не произойдёт, и о производительности в данном случае беспокоиться не стоит.

Если всё же сомневаетесь, попробуйте инициализировать новый лист до вызова вашего метода и передавать его туда в качестве аргумента, а заполнять его уже в методе. При этом возвращать его не обязательно (метод может ничего не возвращать). По завершении метода у вас будет заполненный вашими данными лист.