Передача байта [] вокруг - PullRequest
6 голосов
/ 11 сентября 2011

Сторонний сгенерированный прокси, который мы используем, предоставил тип данных BLOB как байт [], и затем мы представим это значение с помощью генерации кода следующим образом:

public byte[] FileRawData
{
    get { return internalDataRow.FileRawData; }
    set { this.internalDataRow.FileRawData = value; }
}

Это свойство затем используется во время обработкинаше приложение (потенциально в разных сборках).Согласно правилам FxCop, свойства не должны отображать массивы.Итак, какой подход лучше (или лучше) здесь?Что другие делают в этой ситуации?

  1. Переключиться на метод для этих типов.
  2. Изменить коллекцию (т. Е. ICollection<T> или IList<T> реализация)
  3. Отключите это правило FxCop.

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

1 Ответ

2 голосов
/ 11 сентября 2011

Обычная проблема в такой ситуации - неизменность.Когда возвращается байт [], вызывающая сторона может изменить его, не обращаясь к установщику.Подумайте, что произойдет, если кто-то сделал

byte[] retVal = MyInstance.FileRawData;
retVal[1] = 0x00;

Возможно, совсем не то, что вы хотите, потому что значение изменилось внутри MyInstance, что может вызвать проблемы.Поэтому, чтобы остановить это, вы клонируете массив, но он может быть потенциально долгим, а свойства не должны использоваться для длительных операций.Лучший способ решить эту проблему - переключиться на методы для множеств и приемов, если только массив всегда не будет крошечным.Конечно, когда вы начнете писать GetFileRawData () в качестве имени метода, FXCop предложит вам указать, что это должно быть свойство, вы не можете выиграть grin В этом случае просто отключите его в коде;для этого одного метода.

...