我有一个应用程序,它将用户选择的值存储到我的数据集填充数据表中的值。我需要根据此比较在表中设置另一列。但这种比较并不奏效。它总是返回false,而不是进入if条件。
foreach (DataRow dr in dsQuestions.Tables[0].Rows)
{
if (dr["Data"] == indicater[0])
{
dr["IsSelected"] = true;
}
}
indiactor[0]
是一个字符串数组,dr["data"]
也是字符串类型,但它显示需要字符串类型的警告。
答案 0 :(得分:5)
DataRow
索引器将该索引处的字段返回为object
而不是string
。
我建议使用强类型Field
- 扩展方法,该方法也支持nullables:
if (dr.Field<String>("Data") == indicater[0]){}
...以及也支持可空类型的SetField
方法:
dr.SetField("IsSelected", true);
更新,如果indicater[0]
确实是string[]
(不是string
},您希望如何将字符串与字符串[]进行比较?例如,如果您想检查数组是否包含此数据:
if (indicater[0].Contains(dr.Field<String>("Data"))){}
这也可以解释为什么它永远不会进入if
:因为==
只比较字符串相等,其他类型没有覆盖==
- 运算符只会比较参考。 string
永远不会与string[]
相同。但是你没有得到编译时错误,因为你可以将object
与其他所有内容进行比较。
答案 1 :(得分:1)
首先字符串无法比较使用==你应该使用equals方法:
foreach (DataRow dr in dsQuestions.Tables[0].Rows)
{
if (dr["Data"].tostring().Equals(indicater[0]))
{
dr["IsSelected"] = true;
}
答案 2 :(得分:0)
试试这个:
foreach (DataRow dr in dsQuestions.Tables[0].Rows)
{
if (dr["Data"].ToString() == indicater[0].ToString())
{
Convert.ToBoolean(dr["IsSelected"].ToString()) = true;
}
}
答案 3 :(得分:0)
可能对您有用
DataRow[] result = table.Select("Id = 1");
foreach (DataRow row in result)
{
if (row[0].Equals(indicater[0]))
{
//IsSelected
row[1]=true;
Console.WriteLine("{0}", row[0]);
}
}