2012-07-16 47 views
0

Possible Duplicate:
Convert ArrayList into string array(string[]) in c#我如何将arraylist转换为字符串[]?

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

At least one element in the source array could not be cast down to the destination array type.

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

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

你仍然使用.NET 1.1。或者你为什么不使用键入'List '而不是'ArrayList'? – 2012-07-16 09:24:41

+2

“源数组中至少有一个元素不能被转换为目标数组类型。”它真的是在这里告诉你这个问题......善良的;源数组中的每个“元素”都是一个“DataRow”。它告诉你它不能将'DataRow'强制转换为'string'。这是完全正确的; DataRow **不是**字符串...... – 2012-07-16 09:32:14

+0

您试图将DataRows转换为字符串。您需要首先检查是否允许您使用的行。如果是这样,你可以简单地遍历并分别处理它们并将其添加到字符串数组中。但我怀疑这个演员会成功。 – 2012-07-16 09:33:07

回答

0

你有没有尝试过这样的:

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

这会以完全相同的方式发生错误。 'ArrayList'已经返回一个右类型的数组**,当**完成'ToArray'方法时 - 这里没有发生。 – 2012-07-16 09:27:07

+0

ha尝试过,但同样的错误 – user1527989 2012-07-16 09:35:24

+2

@ user1527989 10分钟前,我自己,Gareth,Dane等非常清楚地告诉你,你正在尝试做什么**不能工作,以及为什么。为什么你仍然试图做到这一点,而不是解决根本问题:DataRow **不是字符串**? – 2012-07-16 09:37:58

2

要放置一些DataRow对象为ArrayListDataRow s不是string s。所以:那是行不通的。充其量,你也许可以得到.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(); 
} 
+0

我有一个数据集,我需要将值作为字符串数组[]传递给一个方法,我该如何做?将数据集转换为字符串[]? – user1527989 2012-07-16 09:38:51

+0

@ user1527989那么,你期望'DataRow' *看起来像*作为一个字符串?例如,一个具有5个单元的'DataRow',{1,“abc”,2.0,true,-12}“ - 应该看起来像一个字符串? – 2012-07-16 09:39:57

+0

是的,它必须是字符串。 – user1527989 2012-07-16 09:41:14

1

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

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

(此外,蒂姆Schmelter在评论中说,你真的应该使用List<T>一些T - 可能要么stringDataRow,这取决于你的代码究竟是如何结束了寻找 - 而不是ArrayList

2

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

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

string[] myArray = myArrayList.ToArray(typeof(string)); 
1

每个项目arrayList的类型为DataRow,您不能将其转换为字符串。相反,您应该构造一个表示行内容的字符串,并将该字符串添加到列表中,例如,

myArrayList.Add(dtRow["CustomerName"]); 
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(); 
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 
+1

尽管这是一个独立的示例,但它并不涉及问题的上下文,它特别关注“DataRow”。 – 2012-07-16 09:43:12