2012-08-15 81 views

回答

23

您的代碼實際上顯示List<ArrayList>而不是單個ArrayList。如果你真的有隻有一個ArrayList,你可能會想:

ArrayList resultObjects = ...; 
List<string> results = resultObjects.Cast<string>() 
            .ToList(); 

Cast調用是必需的,因爲ArrayList是弱類型 - 它只是實現IEnumerable,不IEnumerable<T>。 LINQ to Objects中幾乎所有的LINQ操作符都基於IEnumerable<T>

這是假設ArrayList內的值確實是字符串。如果他們不是,您需要向我們提供更多關於您希望每個項目轉換爲字符串的信息。

2

我假設你的第一行是爲了ArrayList resultsObjects = new ArrayList();

如果ArrayList裏面的對象是特定類型的,你可以使用Cast<Type>擴展方法:

List<string> results = resultsObjects.Cast<string>().ToList(); 

如果有ArrayList任意對象轉換爲字符串,就可以使用此:

List<string> results = resultsObjects.Cast<object>().Select(x => x.ToString()) 
                .ToList(); 
0

可以使用ArrayList.ToArray()實現方法具ArrayList元素轉換爲object[]陣列d。

List<ArrayList> resultsObjects = new List<ArrayList>(); 
resultsObjects.Add(new ArrayList() { 10, "BB", 20 }); 
resultsObjects.Add(new ArrayList() { "PP", "QQ" }); 

var list = (from arList in resultsObjects 
         from sr in arList.ToArray() 
         where sr is string 
         select sr.ToString()).ToList(); 
0

您還可以使用LINQ的OfType <>方法,這取決於你是否要拋出一個異常,如果在你的ArrayList中的項目之一是沒有強制轉換爲所需的類型。如果arrayList的對象不是字符串,OfType()會忽略它們。

var oldSchoolArrayList = new ArrayList() { "Me", "You", 1.37m }; 
var strings = oldSchoolArrayList.OfType<string>().ToList(); 
foreach (var s in strings) 
    Console.WriteLine(s); 

輸出:?在.NET中,你如何轉換一個ArrayList到一個強類型的泛型列表,而不使用foreach]

Me 
You 
相關問題