【问题标题】:Unable to convert object to string c#?无法将对象转换为字符串 c#?
【发布时间】:2012-01-05 16:38:59
【问题描述】:

我正在尝试从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;
    }
}

有什么想法吗?

【问题讨论】:

  • 看来list[4]本身就是一个数组
  • 您遇到任何错误/异常吗?如果是,请提供stacktrace
  • ReadDb.ReadFromDB 返回什么?如果其中的代码不是太大 - 你可以发布它吗?
  • list[4] 有一个对象。正如@AndersAbel 所问,ReadDb.ReadFromDB 返回什么?
  • ArrayList 有什么元素?返回的arraylist 是否包含字符串?我的意思是每个 list[0], list[1],... list[n] 是否包含字符串?

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


【解决方案1】:

不要使用ArrayList,而是使用Array&lt;string&gt;。在 2.0 之前的 .NET 中,没有泛型,也无法创建类型安全的集合。 ArrayList 是 .NET 1.X 时代的原始集合之一。

编写新代码时,请始终使用类型安全的泛型集合。 Array&lt;string&gt;(简称string[])就是这样一种类型。

编辑

问题出在这段代码中:

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

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

rowList.Add(string.Format("Name: {0}, Address: {1}", values[0], values[1]);

【讨论】:

  • 最好使用List&lt;string&gt;
  • 但是我需要指定数组大小吗?
  • @Ingol:然后List&lt;T&gt; 如果您需要:通用、动态大小的容器
  • 我编辑了问题,似乎我的方法是将 System.Object[] 作为“值”发送??
【解决方案2】:

改用List&lt;string&gt;:通用(类型安全)、动态大小的容器

【讨论】:

  • 我编辑了问题,似乎我的方法是将 System.Object[] 作为“值”发送??
猜你喜欢
  • 2013-06-28
  • 1970-01-01
  • 2013-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多