【问题标题】:how can i convert arraylist to string[]? [duplicate]如何将arraylist 转换为字符串[]? [复制]
【发布时间】:2012-07-15 03:09:32
【问题描述】:

可能重复:
Convert ArrayList into string array(string[]) in c#

如何将数组列表转换为string[]?下面是我正在尝试的代码。我收到一个错误:

源数组中的至少一个元素无法转换为目标数组类型。

ArrayList myArrayList = new ArrayList();
foreach (DataRow dtRow in DtSet.Tables[0].Rows)
{
    myArrayList.Add(dtRow);
}

string[] myStringArray = (string[])myArrayList.ToArray(typeof(string));

【问题讨论】:

  • 您还在使用 .NET 1.1。或者你为什么不使用输入的List<T> 而不是ArrayList?
  • "源数组中的至少一个元素无法转换为目标数组类型。"它真的在告诉你这里的问题......有点;每个“源数组中的元素”都是DataRow。它告诉您它不能将DataRow 转换为string。这是完全正确的; DataRow 不是 string...
  • 您正在尝试将 DataRows 转换为字符串。您需要首先检查您拥有的行是否允许这样做。如果是,您可以简单地循环遍历它们并将它们单独添加到字符串数组中。但我怀疑这个演员阵容会成功。
  • @Shaks:DataRows 是 never 字符串,永远不能有意义地转换为字符串。 DateRow.ToString() 会调用Object.ToString(),它被实现为this.GetType().ToString()。您可以做的是将每个数据行中的每个字段转换为字符串并连接这些字段。
  • @TimSchmelter - 我想这就是所需要的。 :)

标签: c# asp.net arraylist


【解决方案1】:

您还在使用 .NET 1.1。或者你为什么不使用输入的List<T> 而不是ArrayList?

首先,您不能将DataRow 转换为String。您可以将every field of a DataRow 转换为字符串。

如果您可以使用Linq,您可以使用以下代码获取所有行字段的String[],其中每个字段用逗号分隔:

String[] rowFields = DtSet.Tables[0]
                    .AsEnumerable()
                    .Select(r => string.Join(",", r.ItemArray));
                    .ToArray();

【讨论】:

    【解决方案2】:

    您不能将 DataRow(类型)添加到期望它是字符串的 ArrayList 中。 DataRow 是一个对象,其中包含有关对象的大量信息以及对象数据。

    foreach(DataRow dtRow in dtSet.Tables[0].Rows)
    {
        myArrayList.Add(dtRow["UserName"].ToString());
    }
    
    string[] myArray = myArrayList.ToArray(typeof(string));
    

    【讨论】:

      【解决方案3】:

      您将多个DataRow 对象放入ArrayList。 DataRows 不是 strings。所以:那是行不通的。充其量,你也许可以得到.ToString(),但坦率地说,这不会有太大帮助——因为每一行都会说System.Data.DataRow(因为它不会覆盖ToString()。我认为你需要重新评估您正在尝试做的事情。

      基于评论讨论的示例:

      DataTable table = ...
      string[] strings = new string[table.Rows.Count];
      int idx = 0;
      foreach(DataRow row in table.Rows)
      {
          StringBuilder sb = new StringBuilder();
          object[] cells = row.ItemArray;
          for(int i = 0 ; i < cells.Length ; i++)
          {
              if (i != 0) sb.Append(',');
              sb.Append('"').Append(cells[i]).Append('"');
          }
          strings[idx++] = sb.ToString();
      }
      

      【讨论】:

      • 我有一个数据集,我需要将值作为字符串数组 [] 传递给一种方法,我该怎么做?将数据集转换为字符串 []?
      • @user1527989 好吧,您希望DataRow 看起来像 作为字符串?例如,DataRow 有 5 个单元格,{1,"abc",2.0,true,-12} - 它应该是什么样的字符串?
      • @user1527989 但是 what 字符串?那会是什么?我给了你一行示例数据:你希望它以字符串的形式出现吗?
      • "xyx@gmail.com","aaddcc@gmail.com","ddd@gmail.com" 我想要这样
      • @user1527989 k;下一步:编写一些执行此操作的代码。例如,参见编辑。
      【解决方案4】:

      您有一个ArrayList,其元素的类型为DataRow。您正在尝试将其转换为 strings 的数组。 DataRow 不是 string(也不会在向下转换时变成一个),所以你不能这样做。

      如果字符串数组是您最终想要的,您可能应该在填充ArrayList 时对每个元素调用ToString(或任何您需要的转换)。

      (另外,正如 Tim Schmelter 在 cmets 中所说,对于某些 T,您确实应该使用 List&lt;T&gt; - 可能是 string 或 DataRow,具体取决于您的代码最终看起来如何 -而不是ArrayList。)

      【讨论】:

        【解决方案5】:

        arrayList 中的每一项都是 DataRow 类型,你不能将它转换为字符串。

        相反,您应该构造一个表示行内容的字符串,并将该字符串添加到列表中,例如

        myArrayList.Add(dtRow["CustomerName"]);
        

        【讨论】:

          【解决方案6】:

          你试过了吗:

          string[] array = myArrayList.ToArray(typeof(string)) as string[];
          

          【讨论】:

          • 这将以完全相同的方式出错。 ArrayList 已经返回了一个右类型数组,当它完成了 ToArray 方法 - 这里没有发生。
          • @user1527989 10 分钟前,我本人、Gareth、Dane 等人非常清楚地告诉您,您正在尝试做的事情无法起作用,以及确切原因。为什么您仍然尝试这样做,而不是解决根本问题:DataRow 不是字符串?
          • 我的错,应该完整阅读这个问题。 @Marc 是正确的,您将 DataRows 添加到您的数组列表中,然后尝试将它们强制转换为 string 这是不可能的。你需要重新思考你的逻辑。
          • 嗯,好的,gareth。我遇到了问题。谢谢
          【解决方案7】:
          ArrayList myArrayList = new ArrayList();
          
          myArrayList.Add("as");
          myArrayList.Add("as");
          myArrayList.Add("as");
          myArrayList.Add("as");
          myArrayList.Add("as");            
          myArrayList.Add("as");
          
          string[] array = myArrayList.ToArray(typeof(string)) as string[];
          foreach (var item in array)
          {
              Console.WriteLine(item.ToString());                
          }
          

          输出:

          as
          as
          as
          as
          as
          as
          

          【讨论】:

          • 虽然这作为一个独立的例子是准确的,但它并没有解决问题的上下文,特别是关于DataRow。
          猜你喜欢
          • 2011-11-12
          • 1970-01-01
          • 2012-12-26
          • 2019-09-04
          • 2014-03-06
          • 2016-09-12
          • 2012-01-20
          • 2012-01-15
          • 2012-04-28
          相关资源
          最近更新 更多