无法将对象转换为字符串c#?

时间:2011-11-24 14:01:22

标签: c# asp.net .net exception-handling arraylist

我正在尝试从AraryList中提取值,但我得到的只是System.Object[] ...

protected void Page_Load(object sender, EventArgs e)
{
    ReadDb readClass = new ReadDb();
    ArrayList list = new ArrayList();
    list = readClass.ReadFromDb();

    string s = list[4].ToString();
    Response.Write(s);     
}

编辑:

public class ReadDb
{
    List<string> rowList = new List<string>();

    public List<string> ReadFromDb()
    {
        Database db = new Database(); 

        try
        {
            using(SqlConnection con = new SqlConnection(db.ConnectionString))
            {
                con.Open();
                SqlCommand cmd = new SqlCommand("SELECT * FROM Blog", con);
                SqlDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                   object[] values = new object[reader.FieldCount];
                   reader.GetValues(values);
                   rowList.Add(values.ToString());
                }
                con.Close(); 
            }           
        }
        catch//(SqlException e)
        {
        }
        return rowList;
    }
}

enter image description here

有什么想法吗?

2 个答案:

答案 0 :(得分:10)

请勿使用ArrayList,而是使用Array<string>。在2.0之前的.NET中,没有泛型,也没有办法制作类型安全的集合。 ArrayList是.NET 1.X次的原始集合之一。

编写新代码时,请始终使用类型安全通用集合。 Array<string>(简称为string[])就是这种类型。

修改

问题出在代码的这一部分:

object[] values = new object[reader.FieldCount];
reader.GetValues(values);
rowList.Add(values.ToString());

values是一个对象数组。 ToString()的{​​{1}}方法不返回数组中对象的内容,只返回类型的名称。您必须将对object[]的调用更改为将检索到的行的值格式化为字符串的内容。例如:

values.ToString()

答案 1 :(得分:2)

使用List<string>代替:通用(类型安全),动态大小的容器