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, которые даже не поддаются точной оценке с помощью методов бенчмаркинга. Как и другие уже отмеченные, нет никаких существенных/обнаружимых различий.