Возврат объекта List из метода
Как правильно возвращать объект List из метода? Если просто сделать List выходным параметром, не получится ли операция слишком тяжелой за счет копирования значений локальной переменной метода наружу?
Как правильно возвращать объект List из метода? Если просто сделать List выходным параметром, не получится ли операция слишком тяжелой за счет копирования значений локальной переменной метода наружу?
Если вы генерируете список внутри некоего метода, то 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
Лист хранит в себе ссылки на объекты, а не сами объекты. Поэтому каким бы большим у вас лист ни был, копирования локальных переменных "наружу", т.е. создание новых экземпляров-копий не произойдёт, и о производительности в данном случае беспокоиться не стоит.
Если всё же сомневаетесь, попробуйте инициализировать новый лист до вызова вашего метода и передавать его туда в качестве аргумента, а заполнять его уже в методе. При этом возвращать его не обязательно (метод может ничего не возвращать). По завершении метода у вас будет заполненный вашими данными лист.