如何在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))
答案 0 :(得分:4)
您可以在做出某些假设时查看MemoryStream
的内容,而无需更改内容:
MemoryStream
如果你可以做出这些假设,你可以在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
缓冲区上的监视是可行的,而不是而不是试图观看流。