在Visual Studio快速查看窗口中查看流的内容

时间:2011-10-13 14:02:13

标签: .net visual-studio

如何在Visual Studio中的QuickWatch窗口中查看Stream的内容?

更新

根据Daniel的回答,我使用了以下代码 -

System.Text.Encoding.UTF8.GetString((byte[])stream.GetType().GetMethod("InternalGetBuffer", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic).Invoke(stream, null))

2 个答案:

答案 0 :(得分:4)

您可以在做出某些假设时查看MemoryStream的内容,而无需更改内容:

  1. 您的信息流确实是MemoryStream
  2. 您的信息流仅包含字符串数据
  3. 您知道该字符串的编码,例如UTF8或ASCII
  4. 如果你可以做出这些假设,你可以在Watch窗口中使用以下代码:

    Encoding.UTF8.GetString((byte[])stream.GetType().GetMethod("InternalGetBuffer", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(stream, null))
    

    声明:
    这可能有我未想到的副作用,或者在某些情况下可能会抛出异常,所以不要在生产代码中使用它。

答案 1 :(得分:2)

我不相信内置任何通用内容,因为QuickWatch通常不会影响所观看内容的状态,并且从流中读取本身会改变内部状态(例如当前位置) - 即使假设流can be read

即便如此,并非所有流support seeking,因此从流中读取会使读取数据不可用于实际程序,而无法恢复该数据。


在有限的情况下,如果您从byte缓冲区构建MemoryStream,或者GetBuffer()适用,则byte缓冲区上的监视是可行的,而不是而不是试图观看流。