1

可能重复:
在 c# 中将 ArrayList 转换为字符串数组(字符串 [])

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

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

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

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

7 回答 7

5

您还在使用 .NET 1.1。或者你为什么不使用 typedList<T>而不是 an ArrayList

首先,您不能将 aDataRow转换为String。您可以将DataRow 的每个字段转换为字符串。

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

String[] rowFields = DtSet.Tables[0]
                    .AsEnumerable()
                    .Select(r => string.Join(",", r.ItemArray));
                    .ToArray();
于 2012-07-16T09:32:12.093 回答
2

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

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

string[] myArray = myArrayList.ToArray(typeof(string));
于 2012-07-16T09:27:40.453 回答
2

您正在将多个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();
}
于 2012-07-16T09:26:09.393 回答
1

arrayList 的每个项目都是 DataRow 类型,您不能将其转换为字符串。

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

myArrayList.Add(dtRow["CustomerName"]);
于 2012-07-16T09:28:14.150 回答
1

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

如果字符串数组是您最终想要的,您可能应该ToString在填充ArrayList.

(另外,正如 Tim Schmelter 在评论中所说,你真的应该使用 a List<T>for some T- 可能是stringor DataRow,具体取决于你的代码最终看起来如何 - 而不是 a ArrayList。)

于 2012-07-16T09:26:43.753 回答
0

你有没有试过这个:

string[] array = myArrayList.ToArray(typeof(string)) as string[];
于 2012-07-16T09:25:28.190 回答
0
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
于 2012-07-16T09:42:14.970 回答