2012-07-16 67 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