Рейтинг:
11
Richard Deeming
Это зависит от того, что вы подразумеваете под словом "правильно".
Опубликованный код вернет сообщение об ошибке, преобразованное в массив байтов. Вызывающий код не сможет узнать, является ли этот массив байтов сообщением об ошибке или содержимым потока.
Вы также обновляете static
поле типа List<string>
, что не является потокобезопасной операцией, без использования каких-либо координационных примитивов для ее защиты. Есть хороший шанс, что вы в конечном итоге испортите память, связанную с этим списком.
Было бы гораздо лучше придерживаться вашего исходного кода и позволить исключению распространяться на вызывающего абонента. Ваш код не знает, что вызывающий объект намеревается сделать с результатом, поэтому он не может принять никаких разумных решений о том, что делать, если он потерпит неудачу.
Member 12586110
Привет, Ричард Диминг, из того, что я понимаю, вы говорите, что держите код как есть без обработки ошибок. Это правда?
Спасибо.
Richard Deeming
Да. Нет никакой разумной обработки ошибок, которую вы можете добавить к этому методу, поэтому лучше позволить вызывающему объекту обрабатывать любые исключения.
Тем не менее, вы мог добавьте некоторую проверку аргументов:
public static byte[] streamToByteArray(Stream stream)
{
if (stream == null) throw new ArgumentNullException(nameof(stream));
if (!stream.CanRead) throw new NotSupportedException("Cannot copy from a write-only stream.");
...
Member 12586110
Привет, Ричард Диминг, может быть, что-то вроде ниже будет более уместным?
public static byte[] streamToByteArray(Stream stream)
{
if (stream == null) throw new ArgumentNullException(nameof(stream));
if (!stream.CanRead) throw new NotSupportedException("Cannot copy from a write-only stream.");
using (MemoryStream ms = new MemoryStream())
{
stream.CopyTo(ms);
return ms.ToArray();
}
}
Спасибо Вам за помощь.
Richard Deeming
Да, именно так я бы его и реализовал.
Member 12586110
Большое спасибо.