Это очень хороший вопрос, и я не знаю, почему было решено, что так и должно быть, но, увы, задокументировано так:
BinaryReader класс
Закрыть : Закрывает текущий считыватель и основной поток .
Если вы прочитаете этот ответ на вопрос Как мне «разветвлять» поток в .NET? , тогда вы увидите, что он ссылается на класс NonClosingStreamWrapper в библиотека с именем MiscUtil , которую @ Джон Скит написал, которую можно использовать для обтекания потока, чтобы предотвратить его закрытие.
Вы бы использовали это так (для вашего примера):
private int GetSomethingFromFile(FileStream fs)
{
using (var wrapper = new NonClosingStreamWrapper(fs))
using (BinaryReader br = new BinaryReader(wrapper))
{
fs.Seek(0, SeekOrigin.Begin);
return br.ReadInt32();
}
}