【问题标题】:how to convert arraylist to integer array in c#如何在c#中将arraylist转换为整数数组
【发布时间】:2011-01-01 05:26:18
【问题描述】:

这是我的代码

    con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:/techsoft   /PP1.accdb;Persist Security Info=False");
        con.Open();
        cm = new OleDbCommand("select aa from ab", con);
        OleDbDataReader qq;
        qq = cm.ExecuteReader();
        ArrayList ss = new ArrayList();

        while (qq.Read())
        {
            object[] values = new object[qq.FieldCount];
            qq.GetValues(values);
            ss.Add(values);



        }

如果我使用这个语法来转换

int[] i = (int[])ss.ToArray(System.Type.GetType("System.Int32"));

出现以下错误“源数组中的至少一个元素无法转换为目标数组类型。”

请建议我一个解决方案或任何其他替代方式

【问题讨论】:

  • 你想做什么? SS和qq是什么类型的?
  • qq 是 datareader ss 是 arraylist 我需要来自名为 aa 的列中的全部数据
  • 您使用的是什么版本的 .NET?
  • 听起来values 包含整数以外的内容。
  • 大胆猜测:也许您的结果集中有 NULL (DBNull) 值?

标签: c# arraylist


【解决方案1】:

如果你的ArrayListss中有不是整数的对象,那么你需要指定是失败还是忽略它们。

假设你想忽略它们,那么你可以使用 LINQ:

int[] res = ss.OfType<int>().ToArray();

(假设您在范围内有一个using System.Linq。)

【讨论】:

    【解决方案2】:

    不要使用ArrayList,使用List&lt;int&gt;,您将免费获得所需的内容(列表中的整数数组)。

    如果您想引用代表 System.Int32 的 System.Type,我更喜欢 typeof(int) 没有字符串文字和这种不必要的查找。

    标识符很难阅读,顺便说一句 - 当你提出问题时,你可能想让它们更容易理解。

    其他发帖人发现了真正的问题:您将数组添加到列表中,它们不是整数。 Maybe(?) 整数数组,但没有更多细节我们不会知道。

    【讨论】:

      【解决方案3】:

      据我所知,您放入 ss 的元素本身似乎就是数组。

      然后您尝试将这些数组转换为显然不起作用的整数。

      你应该做的是:

      while (qq.Read())
      {
          //object[] values = new object[qq.FieldCount]; - Necessary?
          //qq.GetValues(values); - Necessary?
          ss.Add(qq["aa"]);
      }
      

      【讨论】:

        【解决方案4】:

        您的某个值可能无法转换为 Int32。更好的方法是使用泛型 List 类型。这与 ArrayList 的行为类似,但仅接受 Int32 值。然后你可以使用 ToArray() 方法返回一个真正的 Int32[] 数组。

        【讨论】:

          【解决方案5】:

          我会为此使用强类型的List&lt;int&gt;。另外,由于您只从表中选择一个字段,我想说您的代码可以简化一点:

          List<int> myInts = newList<int>();
          
          using(IDataReader reader = cm.ExecuteReader()) {
              while (reader.Read())
              {
                  myInts.Add(int.Parse(reader["aa"].ToString()));
              }
          }
          

          那你就可以了

          myInts.ToArray();
          

          【讨论】:

            【解决方案6】:

            如果您至少使用 .NET 3.5:

            using System.Linq;
            
            //...
            
            int[] myArray = ss.Cast<int>().ToArray();
            

            否则,您将通过 ArrayList 手动获得foreach

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-03-10
              • 2012-06-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-12-04
              • 1970-01-01
              相关资源
              最近更新 更多