Stream.Seek(0, SeekOrigin.Begin) или Position = 0
Когда вам понадобится reset, поток для начала (например, MemoryStream
) лучше всего использовать
stream.Seek(0, SeekOrigin.Begin);
или
stream.Position = 0;
Я видел, что оба работают нормально, но задавались вопросом, был ли он более правильным, чем другой?
Ответы
Ответ 1
Используйте положение, когда устанавливаете абсолютное положение, и Ищите, когда устанавливаете относительное положение. Оба предоставляются для удобства, поэтому вы можете выбрать тот, который соответствует стилю и читаемости вашего кода. Доступ к позиции требует, чтобы поток можно было искать, чтобы они были взаимозаменяемы.
Ответ 2
Вы можете посмотреть исходный код обоих методов, чтобы узнать:
Стоимость практически идентична (3 ifs и немного арифметики). Однако это верно только для перехода к абсолютным смещениям, таким как Position = 0
, а не к относительным смещениям, таким как Position += 0
, и в этом случае Seek кажется немного лучше.
Однако вы должны иметь в виду, что мы говорим о выполнении нескольких целочисленных атертметик и проверок ifs, которые даже не поддаются точной оценке с помощью методов бенчмаркинга. Как и другие уже отмеченные, нет никаких существенных/обнаружимых различий.