如何在c#中将arraylist转换为整数数组

时间:2010-01-04 11:47:40

标签: c# arraylist

这是我的代码

    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"));

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

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

6 个答案:

答案 0 :(得分:4)

如果ArrayList ss中存在非整数的对象,则需要指定是失败还是忽略它们。

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

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

(假设你的范围是using System.Linq。)

答案 1 :(得分:2)

不要使用ArrayList,转到List<int>,你可以免费得到你想要的东西(列表中的int数组)。

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

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

其他海报确定了真正的问题:您将数组添加到列表中,而不是整数。也许(?)整数数组,但如果没有更多细节,我们就不会知道。

答案 2 :(得分:1)

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

然后你试图将这些数组转换为显然不起作用的int。

你应该做的是:

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我会使用强类型List<int>。此外,由于您只是从表中选择一个字段,我会说您的代码可以简化一点:

List<int> myInts = newList<int>();

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

然后你可以做

myInts.ToArray();

答案 5 :(得分:0)

如果您至少使用.NET 3.5:

using System.Linq;

//...

int[] myArray = ss.Cast<int>().ToArray();

否则,您手动通过ArrayList foreach