2010-08-08 68 views
2

我有問題的LINQ查詢。在上面,我得到錯誤system.object不能被轉換爲Sytem.String。可能是什麼問題?LINQ中ArrayList問題

如果我使用string()而不是ArrayList,它不會引發錯誤。但是在String()中,我應該手動添加項目

Public Shared Function GetCompletionList(ByVal prefixText As String, ByVal count As Integer, ByVal contextKey As String) As String() 
    Dim movies As New ArrayList() 
     Dim dt As DataTable = StaticData.Get_Data(StaticData.Tables.LU_TAG) 
     For Each row As DataRow In dt.Rows 
      movies.Add(row.Item("DS_TAG")) 
     Next 
    Return (From m In movies _ 
      Where m.StartsWith(prefixText, StringComparison.CurrentCultureIgnoreCase) _ 
      Select m).Take(count).ToArray() 
End Function 

回答

2

您可以使用List(Of String)而不是ArrayList。

+0

謝謝,我試過後發佈在這裏:)它的工作。謝謝 – ceee 2010-08-08 12:41:17

0

添加一個引用到System.Data.DataSetExtensions做:

return dt 
    .AsEnumerable() // sic! 
    .Select(r => r.Item("DS_TAG")) // DataTable becomes IEnumrable<DataRow> 
    .Where(m => m.StartsWith(prefixText, StringComparison.CurrentCultureIgnoreCase)) 
    .ToArray(); 

(抱歉,這是C#語法,改寫到VB.NET,因爲你需要)

3

一般情況下,不要永遠使用ArrayListSystem.Collections中的任何其他類型。這些類型在命名空間System.Collections.Generic中已被棄用,以支持其通用等效(如果可用)。相當於ArrayList恰好是List(Of T)。其次,從方法中返回數組通常被認爲是不好的做法 - 儘管框架中的方法都做到了這一點(但現在被廣泛認爲是一個錯誤)。而是返回IEnumerable(Of T)IList(Of T),即:使用接口而不是具體類型。