将datarow值与if中的字符串进行比较

时间:2014-09-03 07:16:55

标签: c# asp.net

我有一个应用程序,它将用户选择的值存储到我的数据集填充数据表中的值。我需要根据此比较在表中设置另一列。但这种比较并不奏效。它总是返回false,而不是进入if条件。

foreach (DataRow dr in dsQuestions.Tables[0].Rows)
{
    if (dr["Data"] == indicater[0])
    {
        dr["IsSelected"] = true;
    }
}

indiactor[0]是一个字符串数组,dr["data"]也是字符串类型,但它显示需要字符串类型的警告。

4 个答案:

答案 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]);
    }
}