Создание оператора IF для значения сетки данных - PullRequest
1 голос
/ 31 мая 2010

Я подумал, что это будет проще, чем оказалось. По какой-то причине я не могу найти способ заставить то, что я пытаюсь сделать, работать с оператором If:

  List<int> miscTimes = new List<int>();

            for (int i = 0; i < MISCdataGridView1.RowCount; i++)
            {
                if (MISCdataGridView1.Rows[i].Cells[2].Value == "Something")
                {
                    miscTimes.Add(Convert.ToInt32(MISCdataGridView1.Rows[i].Cells[3].Value));
                }
            }
            return miscTimes;

По какой-то причине мне не нравится, что я делаю с оператором if:

if (MISCdataGridView1.Rows[i].Cells[2].Value == "Something")

это не вызывает исключения, но не создает мой список. Он имеет зеленое подчеркивание и говорит: «Возможно непреднамеренное сравнение ссылок; приведите тип левой стороны к« string »» Я пытался преобразовать в строку и все такое. Как мне поступить об этом?

Ответы [ 3 ]

2 голосов
/ 31 мая 2010

Свойство DataGridViewCell.Value имеет тип Object, и поэтому вам необходимо привести к String

(String)dataGridview.Rows[i].Cells[j].Value == "Something"

или полагайтесь на Object.Equals().

Object.Equals(dataGridview.Rows[i].Cells[j].Value, "Something")

Использование Object.Equals() более надежно, поскольку может работать со значением, не относящимся к типу String.С другой стороны, использование приведения подчеркивает тот факт, что значение должно быть String и будет выдавать исключение, если это не так - ясно показывая, что вы, вероятно, имеете ошибку.

0 голосов
/ 31 мая 2010

Похоже, что «Value» возвращает объект, а вы сравниваете со строкой, поэтому он сравнивает ссылки, когда вы, вероятно, хотите сравнить значение, то есть «Something». Приведите левую сторону к строке (или вызовите ToString (), что угодно, просто убедитесь, что вы явно сравниваете две строки).

0 голосов
/ 31 мая 2010

Свойство Value имеет тип Object.
Поэтому вы используете стандартный оператор ==, который сравнивает объекты по ссылке.

Для правильного сравнения строк вам необходимо сравнить их по значению. (Поскольку у вас может быть два разных экземпляра String, содержащих одно и то же значение)

Измените его на

if ((string)MISCdataGridView1.Rows[i].Cells[2].Value == "Something")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...