无法将类型'int'隐式转换为'int []'

时间:2011-10-03 07:46:23

标签: c# asp.net

我已宣布我的int[]如下

int[] iroleID = new int[] { };

我从数据库获取值并分配给iroleid的代码如下

if (oAuthenticate.getTaskID(out m_oDataSet1, "uspgetTaskID"))
{
  for (int iTaskid = 0; iTaskid < m_oDataSet1.Tables[0].Rows.Count; iTaskid++)
  {
   iroleID = Convert.ToInt32(m_oDataSet1.Tables[0].Rows[iTaskid]["RoleID"].ToString());
   strTaskID = m_oDataSet1.Tables[0].Rows[iTaskid]["TaskID"].ToString();
   arrTaskID.Add(strTaskID);
   }
}

但我收到的错误是Cannot implicitly convert type 'int' to 'int[]',任何人都可以帮助我

6 个答案:

答案 0 :(得分:5)

并不令人惊讶。看看

iroleID = Convert.ToInt32(...);

Convert.ToIn32会产生int,就像编译器声称的那样。 要么像

那样做
if (oAuthenticate.getTaskID(out m_oDataSet1, "uspgetTaskID"))
{
  var iroleID = new int[m_oDataSet1.Tables[0].Rows.Count];
  for (int iTaskid = 0; iTaskid < m_oDataSet1.Tables[0].Rows.Count; iTaskid++)
  {
   iroleID[iTaskid] = Convert.ToInt32(m_oDataSet1.Tables[0].Rows[iTaskid]["RoleID"].ToString());
    /* ... */
   }
}

或重新考虑您的算法。

PS:我很难说你做了什么,因为你没有表明iRoleID的目的是什么

答案 1 :(得分:1)

当然!

 iroleID = Convert.ToInt32(m_oDataSet1.Tables[0].Rows[iTaskid]["RoleID"].ToString());

iroleID是一个int数组; Convert.ToInt32()返回一个int 所以:
- 您必须声明int变量tu store Convert.ToInt32()

- 只需将Convert.ToInt32()结果添加到iroleIDiroleID.Add(Convert.ToInt32(...))

答案 2 :(得分:0)

当然,您不能只将int值分配给int[]变量。您可能需要向集合中添加项目。将您的int[] iroleID = new int[] { };更改为List<int> iroleID = new List<int>();,然后将代码更改为:

if (oAuthenticate.getTaskID(out m_oDataSet1, "uspgetTaskID"))
{
  for (int iTaskid = 0; iTaskid < m_oDataSet1.Tables[0].Rows.Count; iTaskid++)
  {
   iroleID.Add(Convert.ToInt32(m_oDataSet1.Tables[0].Rows[iTaskid]["RoleID"].ToString()));
   strTaskID = m_oDataSet1.Tables[0].Rows[iTaskid]["TaskID"].ToString();
   arrTaskID.Add(strTaskID);
   }
}

答案 3 :(得分:0)

使用int数组的索引来赋值,不能直接将整数分配给整数数组。

iroleID[0] = Convert.ToInt32(m_oDataSet1.Tables[0].Rows[iTaskid]["RoleID"].ToString());

答案 4 :(得分:0)

iroleID = Convert.ToInt32(m_oDataSet1.Tables[0].Rows[iTaskid]["RoleID"].ToString());

这会将RoleID列值转换为整数。您正在获取此整数并尝试将其分配给整数数组,这当然是不可能的。你的想法究竟是什么?如果要使用所有ID填充单个数组,则可以执行相同操作,但将其分配给普通整数,然后将该整数添加到列表或其他内容。

您也可以使用普通的ADO.NET从该列中检索所有值并将其强制转换为List。那会更好。

答案 5 :(得分:0)

已经回答了一个问题,您必须将其添加到给出您想要的位置的数组

iroleID[iTaskid] = Convert.ToInt32(m_oDataSet1.Tables[0].Rows[iTaskid]["RoleID"].ToString());

另一个问题是,您创建了一个数组。你必须给出数组的长度。

int[] iroleID = new int[m_oDataSet1.Tables[0].Rows.Count];