Редактировать : приведенное ниже решение не работает для MemoryStreams, которые были созданы с помощью конструктора MemoryStream(byte[], int, int, bool, bool)
с последним параметром publiclyVisible
, установленным на true
.
Согласно MSDN , MemoryStream.GetBuffer
выдаст UnauthorizedAccessException
, если объект не был создан с «публично видимым буфером».Конструкторы, перечисленные с публично видимыми буферами, удобно отображаются на те же, которые можно изменять.Таким образом, вы можете проверить его размер, проверив GetBuffer
:
public static bool IsResizable(this MemoryStream stream)
{
if (stream == null) throw new ArgumentNullException("stream");
bool resizable;
try
{
stream.GetBuffer();
resizable = true;
}
catch (UnauthorizedAccessException) { resizable = false; }
return resizable;
}