CA2202 в FileStream с StreamWriter

Я использую файловый поток и потоковый автор, чтобы написать небольшой текст в файле, который выдает мне предупреждение CA2202.

    public void WritePIDToFile()
    {
        FileStream fh = null;
        try
        {
            fh = new FileStream(HIMSHelper.ApplicationDirectory + "PID", FileMode.Open, FileAccess.ReadWrite, FileShare.Read);
            using (var sr = new StreamWriter(fh))
            {
                sr.Write(PID);
            }
        }
        finally
        {
            if (fh != null)
            {
                fh.Dispose();//I got CA2202 here
            }
        }
    }

Я уже пробовал решение здесь CA2202: не удалять объекты несколько раз

Можете ли вы дать мне какие-либо предложения? Пожалуйста.

Спасибо


person zer09    schedule 24.01.2016    source источник
comment
Ваш блок using закроет StreamWriter, и это может также закрыть объект FileStream. Даже если код выдаст ошибку в блоке using, объект(ы) все равно будет закрыт и удален.   -  person Tim    schedule 24.01.2016
comment
Я уже пробовал решение здесь. Не совсем так: в вашем коде отсутствует строка fh = null;.   -  person    schedule 24.01.2016
comment
да, установка fh = null перед вызовом sr.Write() решает проблему, но меня мало беспокоит, что это может привести к непоследовательному поведению. Имеет ли это?   -  person zer09    schedule 24.01.2016
comment
О каких возможных несоответствиях вы думаете? Спрашиваю, потому что не вижу.   -  person    schedule 24.01.2016
comment
Можно ли установить fh = null перед вызовом sr.Write(PID)?   -  person zer09    schedule 24.01.2016
comment
Да, это нормально. sr.Write(PID) не смотрит на текущее значение переменной fh. Не может, у него нет к нему доступа. Вы передали старое значение с помощью var sr = new StreamWriter(fh), и это старое значение будет использоваться sr.Write(PID).   -  person    schedule 24.01.2016
comment
Большое спасибо, это большая помощь.   -  person zer09    schedule 24.01.2016