Моно ошибка?CS0219 предупреждение, когда переменная фактически используется - PullRequest
0 голосов
/ 13 февраля 2012

MonoDevelop (2.10.8) сообщает:

JPGCorruptForm.cs(20,20): Warning CS0219: The variable `myStream' is assigned but its value is never used (CS0219) (JPGCorrupt)

Для этой функции:

    private void toolStripButtonChooseText_Click(object sender, EventArgs e)
    {
        Stream myStream = null;
        OpenFileDialog openFileDialog = new OpenFileDialog();

        openFileDialog.InitialDirectory = ".";
        openFileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
        openFileDialog.FilterIndex = 1;
        openFileDialog.RestoreDirectory = false;

        if (openFileDialog.ShowDialog() == DialogResult.OK)
        {
            Stop();

            try
            {
                if ((myStream = openFileDialog.OpenFile()) != null)
                {
                    _settings.TextFile = openFileDialog.FileName;
                    CurrentTextFile = _settings.TextFile;
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
            }
        }
    }

Это мой первый тестовый моно-проект, и я не уверен, что это нормально. Это, конечно, не смертельно, но может раздражать.

1 Ответ

8 голосов
/ 13 февраля 2012

Ну, вы присваиваете значение переменной, но на самом деле вы никогда не читаете из нее. Другими словами, вы можете легко удалить его, просто изменив среднее выражение на:

if (openFileDialog.OpenFile() != null)

Обратите внимание, что ваш существующий код на самом деле не читает из переменной, даже если вы думаете, что это происходит при сравнении с нулем. Это больше похоже на это:

Stream tmp = openFileDialog.OpenFile();
myStream = tmp;
if (tmp != null)

Звучит так, как будто вы, вероятно, должны использовать его, чтобы закрыть поток, если ничего больше ... хотя я бы тогда объявил об этом как можно позже, например:

using (Stream myStream = openFileDialog.OpenFile())
{
    if (myStream != null)
    {
        _settings.TextFile = openFileDialog.FileName;
        CurrentTextFile = _settings.TextFile;
    }
}

Вот более простой пример той же проблемы, но такой:

using System;

class Test
{
    static void Main()
    {
        string x;

        if ((x = "Hello") != null)
        {
            Console.WriteLine("Yes");
        }
    }
}

Обратите внимание, что с уровнем предупреждения 4 (и, возможно, более низким) компилятор Microsoft C # 4 также обнаруживает:

Test.cs(7,16): warning CS0219: The variable 'x' is assigned but its value is
        never used
...