Почему «Свойства, которые возвращают массивы, подвержены неэффективности кода»? - PullRequest
9 голосов
/ 24 июля 2010

У меня есть фрагмент кода, который имеет дело с клиентами, хранящимися в базе данных. Существует объект Customer, и он имеет, среди прочего, два свойства типа byte[]: одно свойство для соли пароля, второе для хэша пароля.

Проверяя код с помощью FxCop, я вижу, что он жалуется ( CA1819 , Performance Performance ), что:

"Свойства, которые возвращают массивы, подвержены неэффективности кода. Рассмотрите возможность использования коллекции или создания этого метода. Для получения дополнительной информации см. Рекомендации по проектированию."

и предлагает:

"Измените 'Customer.PasswordHash', чтобы вернуть коллекцию или сделать ее методом."

Я не очень понимаю, в чем заключается неэффективность кода в том, что я делаю?

1 Ответ

4 голосов
/ 24 июля 2010

Проблема в том, что массивы всегда изменяемы.Это означает, что вы не можете вернуть один из методов без:

  • Разрешение вызывающей стороне испортить ваше внутреннее состояние
  • Сначала создайте копию

Если вы используете коллекцию, вы можете вместо этого создать реальную обертку вокруг реальной коллекции и вернуть ее - и это может быть значительно дешевле.В качестве альтернативы, если вы измените его на метод, который снизит ожидание того, что он будет вызываться очень быстро.

Конечно, если вы довольны вызывающими объектами, мутирующими ваши данные, тогда массив будет работать нормально...

...