如何将数组列表转换为string[]
?下面是我正在尝试的代码。我收到一个错误:
源数组中至少有一个元素无法转换为目标数组类型。
ArrayList myArrayList = new ArrayList();
foreach (DataRow dtRow in DtSet.Tables[0].Rows)
{
myArrayList.Add(dtRow);
}
string[] myStringArray = (string[])myArrayList.ToArray(typeof(string));
答案 0 :(得分:5)
您还在使用.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();
答案 1 :(得分:2)
您将多个DataRow
个对象放入ArrayList
。 DataRow
不是string
。所以:那不行。最好的情况是,你可以获得.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();
}
答案 2 :(得分:2)
您无法获取DataRow(类型)并将其添加到ArrayList,期望它是一个字符串。 DataRow是一个对象,它有大量关于对象和对象数据的信息。
foreach(DataRow dtRow in dtSet.Tables[0].Rows)
{
myArrayList.Add(dtRow["UserName"].ToString());
}
string[] myArray = myArrayList.ToArray(typeof(string));
答案 3 :(得分:1)
您的ArrayList
元素的类型为DataRow
。您正在尝试将其转换为string
s的数组。 DataRow
不是string
(在向下转换时也不会成为一个),所以你不能这样做。
如果字符串数组是您最终想要的,那么在填充ToString
时,您应该在每个元素上调用ArrayList
(或者您需要的任何转换)。
(另外,正如Tim Schmelter在评论中所说,对于某些List<T>
,您应该使用T
- 可能是string
或DataRow
,具体取决于具体情况你的代码最终看起来如何 - 而不是ArrayList
。)
答案 4 :(得分:1)
arrayList的每个项都是DataRow类型,你不能将它强制转换为字符串。
相反,您应该构造一个表示行内容的字符串,并将该字符串添加到列表中,例如
myArrayList.Add(dtRow["CustomerName"]);
答案 5 :(得分:0)
你试过这个:
string[] array = myArrayList.ToArray(typeof(string)) as string[];
答案 6 :(得分: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