2011-08-30 173 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