不能隐式地将类型“对象”转换为system.collection.arraylist

本文关键字:转换 system arraylist collection 对象 类型 不能 | 更新日期: 2023-09-27 18:34:00

在下面的代码中,我有一个在执行时抛出错误的方法

" 无法将类型'对象'隐式转换为 'System.Collections.ArrayList'"

请帮我做到这一点。

private string strGetIndentString()
{
        ArrayList nArr = new ArrayList();
        System.Text.StringBuilder strInfo = new System.Text.StringBuilder();
        if (Session["CHECKED_ITEMS"] != null)
            nArr = Session["CHECKED_ITEMS"];//throws error
        for (int i = 0; i < nArr.Count; i++)
             strInfo.Append(nArr[i].ToString() + ",");
        return strInfo.ToString().TrimEnd(",".ToCharArray());            
}

不能隐式地将类型“对象”转换为system.collection.arraylist

像这样更改代码,在获取值表单会话的位置

nArr=(ArrayList)Session["CHECKED_ITEMS"];

来自 Session 的数组访问器返回一个 object ,而不是一个ArrayList,所以你必须强制转换它:

nArr = (ArrayList)Session["CHECKED_ITEMS"];

或者(如果变量不是ArrayList,则nArr null

nArr = Session["CHECKED_ITEMS"] as ArrayList;

我强烈建议使用泛型List<T>类,因为它是类型化的,所以更安全。

正如错误所说,您需要再次将会话转换为ArrayList

private string strGetIndentString()
        {
            ArrayList nArr = new ArrayList();
            System.Text.StringBuilder strInfo = new System.Text.StringBuilder();
            if (Session["CHECKED_ITEMS"] != null)
                nArr =(ArrayList) Session["CHECKED_ITEMS"];//throws error
            for (int i = 0; i < nArr.Count; i++)
                strInfo.Append(nArr[i].ToString() + ",");
            return strInfo.ToString().TrimEnd(",".ToCharArray());
        }