Нет, это не утечка памяти - она просто заставляет сборщик мусора работать тяжелее, чем мог бы. На самом деле, статья MSDN немного вводит в заблуждение: если свойство создает новую коллекцию при каждом вызове, оно будет таким же плохим (с точки зрения памяти), как и с массивом. Возможно, хуже из-за обычного увеличения размеров большинства реализаций коллекций.
Если вы знаете, что метод / свойство работает, вы всегда можете минимизировать количество вызовов:
var arr = obj.myObj; // var since I don't know the type!
for (int i = 0; i < arr.Length; i++) {
DoSomething(arr[i]);
}
или даже проще, используйте foreach
:
foreach(var value in obj.myObj) {
DoSomething(value);
}
Оба подхода вызывают объект только один раз. Второе чище ИМО.
Другие мысли; назовите это метод! то есть obj.SomeMethod()
- это устанавливает ожидание того, что оно работает, и позволяет избежать нежелательного obj.Foo != obj.Foo
(что было бы в случае массивов).
Наконец, у Эрика Липперта есть хорошая статья на эту тему .