2011-08-30 146 views
114

当你需要一个流重置为开头(如MemoryStream)是使用Stream.Seek(0,SeekOrigin.Begin)或位置= 0

stream.Seek(0, SeekOrigin.Begin); 

stream.Position = 0; 
最佳实践

我见过这两个工作都很好,但是想知道一个比另一个更正确吗?

+0

如果是返回内存流的内容,ToArray的作品无论位置如何 –

+3

答案:最具可读性。 – jgauffin

+6

我个人更喜欢'stream.Position = 0;'但我必须同意@jgauffin,只要选择最具可读性,两种解决方案都可以正常工作。 – lenniep

回答

96

设置绝对位置时使用位置,设置相对位置时使用位置。两者都是为了方便而提供的,所以您可以选择适合您代码风格和可读性的代码。访问位置要求流可以搜索,因此它们可以安全地互换。

+39

我甚至对相对位置使用属性:'stream.Position + = 10;'对我来说看起来很可读。 –

+4

使用SeekOrigin.Begin和SeekOrigin.Current之间是否存在速度差异? – gonzobrains

+6

@gonzobrains [“返回值:流中的新位置,通过组合初始参考点和偏移量计算得出。”](http://msdn.microsoft.com/zh-cn/library/system.io.memorystream .seek.aspx)。所以合并成本不仅仅是直接设置位置。实际上,它意味着挑剔。 ))) – user808128