Рейтинг:
10
OriginalGriff
Начните с документации по сообщению об ошибке:
CA1819: свойства не должны возвращать массивы - Visual Studio | Microsoft Docs[^]
Это объясняет:
Microsoft:
Массивы, возвращаемые свойствами, не защищены от записи, даже если свойство доступно только для чтения. Чтобы сохранить массив защищенным от несанкционированного доступа, свойство должно возвращать копию массива. Как правило, пользователи не понимают неблагоприятных последствий для производительности вызова такого свойства. В частности, они могут использовать это свойство в качестве индексированного свойства.
Копирование массива-это большая работа, и она может привести к довольно большому падению производительности, которое скрыто в безобидной строке
for (int x = 0; x < myVar.Array.Width; x++)
for (int y = 0; y < myVarArray.Height; y++)
Console.WriteLine(myVar.Array[x,y]);
Выглядит как совершенно хороший код, но каждый доступ к массиву создает новую копию оригинала.
Вместо массива используйте список или аналогичную коллекцию.
0x01AA
Можете ли вы дать мне подсказку, почему список вместо массива должен помочь? На мой взгляд, также возвращение списка не мешает его изменять. Где я ошибаюсь?
Заранее спасибо.
OriginalGriff
Я абсолютно согласен - возвращать список так же плохо, но ... это мисс для тебя.
Возврат любой коллекции-это то, о чем нужно тщательно подумать и, вероятно, предоставить метод вместо свойства, потому что он "скрывает" операцию копирования немного меньше.
Вы получаете ошибку только в том случае, если свойство является внешне видимым, так что ...
Member 12712527
Сэр, вы говорите, что списки-это тоже плохо. Жизнеспособно ли использовать статический массив или что будет правильным решением? ..
CHill60
Предоставьте метод вместо использования свойства
0x01AA
Я бы сказал, что вывод из массива или списка и определение интерфейса только для чтения (для возврата)-это "правильное" решение, но, скорее всего, излишнее.
А также это, наконец, не мешает привести возвращаемое значение и изменить его.
OriginalGriff
В принципе, не используйте свойства для возврата коллекций - вместо этого используйте методы, чтобы было более очевидно, что это может быть копия или "сгенерированная на лету" коллекция.
Или сделайте содержащий класс непубличным: пока он содержится в сборке, VS не должен жаловаться.