MemoryStream.TryGetBuffer什么时候会返回一个有用的ArraySegment?

chw*_*arr 11 .net memorystream

bool MemoryStream.TryGetBuffer(out ArraySegment<byte> buffer)是.NET 4.6中的一个新API,可用于访问存储在MemoryStream中的有效字节,而无需复制它们.这非常令人兴奋!它返回一个bool,如果转换成功则为"true;否则为false"并填充out参数.

什么时候返回true,表示out ArraySegment<byte> buffer现在包含有效信息?今天没有记录.

我知道如果它返回false,我可以.ToArray()用来获取字节的副本.并且,我们已经拥有.GetBuffer(),但有时MemoryStreams是在缓冲区中创建的,并且这些信息很难(好吧,等等)以后再使用,更不用说try ... catch稳健性所需了.

chw*_*arr 12

为了TryGetBuffer执行成功的转换并使用有用信息填充out参数,缓冲区必须是可见的.如果使用以下任何构造函数,则缓冲区可见:

  • MemoryStream()
  • MemoryStream(int capacity)
  • MemoryStream(byte[] buffer, int index, int count, bool writable, bool publiclyVisible)publiclyVisible: true.

查看源代码以获取更多详细信息.