Windows 为什么MemoryStream.GetBuffer()总是抛出?

Windows 为什么MemoryStream.GetBuffer()总是抛出?,windows,exception,memorystream,getbuffer,Windows,Exception,Memorystream,Getbuffer,以下代码将始终抛出 UnauthorizedAccessException(无法访问MemoryStream的内部缓冲区。) 这是在一个普通的旧控制台应用程序,我作为管理员运行。我无法想象我能给这个代码一个更特权的设置。那为什么我不能到这个缓冲区?(如果没有人可以,GetBuffer方法的意义是什么?) MSDN文件说 使用创建MemoryStream实例的步骤 公开可见的缓冲区,使用 记忆流, 内存流(数组[],Int32, Int32,布尔型,布尔型),或 内存流(Int32) 我不是在这样

以下代码将始终抛出 UnauthorizedAccessException(无法访问MemoryStream的内部缓冲区。)

这是在一个普通的旧控制台应用程序,我作为管理员运行。我无法想象我能给这个代码一个更特权的设置。那为什么我不能到这个缓冲区?(如果没有人可以,GetBuffer方法的意义是什么?)

MSDN文件说

使用创建MemoryStream实例的步骤 公开可见的缓冲区,使用 记忆流, 内存流(数组[],Int32, Int32,布尔型,布尔型),或 内存流(Int32)

我不是在这样做吗


另外,我不想使用ToArray(),因为这会产生一个副本。

您使用的似乎是
MemoryStream(array[])
,它与文档中提到的三个版本中的任何一个都不匹配。

是您正在使用的
MemoryStream(byte[])
构造函数的文档。它特别指出:

此构造函数不公开基础流。GetBuffer引发UnauthorizedAccessException

您应该改用构造函数,使用
publilyvisible=true

检查文档中的

使用创建MemoryStream实例的步骤 公开可见的缓冲区,使用 MemoryStream,MemoryStream(字节[], Int32,Int32,布尔型,布尔型),或 内存流(Int32)。如果当前 流可调整大小,为此调用两次 方法不返回相同的数组,如果 已调整基础字节数组的大小 通话间隙。额外的 有关详细信息,请参阅容量


您需要使用不同的构造函数。

若要添加到其他人已在此处添加的内容中

另一种让代码工作的方法是将代码更改为以下行

byte[] buf2 = ms.ToArray();

如果您不想指定构造函数的所有参数,只想获得publiclyVisible参数,那么可以使用只包含int32参数的参数,如@Dolphin的答案中所指定的。
byte[] buf2 = ms.ToArray();