为什么MemoryStream的位置属性会随着SetLength改变而变得不可变
本文关键字:改变 SetLength 不可变 MemoryStream 位置 属性 为什么 | 更新日期: 2023-09-27 17:55:02
使用System.IO.MemoryStream类有问题。
创建后,如下所示:
var memory = new MemoryStream();
然后设置要写入的字节长度。
var length = 181;
memory.SetLength( length);
然后在调试器中,内存显示长度和位置BOTH设置为181。在单独的简单测试程序中it属性显示位置在SetLength()
之后仍然为零
此外,如果使用。将Position
属性更改为0调试器或通过添加一行代码,它忽略位置属性仍然是181。因此,
然而,同样在一个简单的单元测试中,这是预期的。
起初,这似乎是一个线程问题如果MemoryStream不是线程安全的。但在调试器中,在调用这些代码之前,我冻结了所有其他线程。但它仍然像上面那样失败。
嗯,这是最奇怪的。有什么好主意吗?
我和你看到的不一样。如果我在Main中使用以下代码创建一个控制台应用程序:
var x = new MemoryStream();
x.SetLength(181);
. .并跟踪过去对SetLength
的调用,调试器显示Length
等于181,Position
等于0。必须有其他东西影响流对象
其实我已经找到问题所在了。第一条线索是,它只发生在调试器中。
原因是ToString()方法被重写。
它正在读取内存并在调试器中显示。这是从内存中读取的,因此修改了位置。
问题解决了。
谢谢。