这是我认为比现在更容易的事情。无论出于何种原因,我似乎无法找到一种方法来制作我在这里尝试使用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")
它没有抛出异常,但它没有构建我的列表。它有绿色下划线并说“可能的意外参考比较;将左侧类型转换为'字符串'” 我已经尝试过转换为字符串和所有这些。我应该怎么做呢?
答案 0 :(得分:2)
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
并且如果不是则会抛出异常 - 清楚地表明你可能有一个错误。
答案 1 :(得分:0)
Value
属性的类型为Object
因此,您使用的是标准==
运算符,它通过引用比较对象。
要正确比较字符串,您需要按值进行比较。 (因为您可以有两个不同的String
个实例保持相同的值)
将其更改为
if ((string)MISCdataGridView1.Rows[i].Cells[2].Value == "Something")
答案 2 :(得分:0)
看起来“Value”返回一个对象,并且您正在与一个字符串进行比较,因此当您想要比较该值时,它正在比较引用,即“Something”。将左侧转换为字符串(或调用ToString(),无论如何,只需确保您明确比较两个字符串)。