我可以將IList
轉換成ArrayList
?如何將Ilist投射到ArrayList?
如果是,我該怎麼辦?
IList alls = RetrieveCourseStudents(cf);
ArrayList a = (ArrayList)alls;
這是正確的嗎?
是有錯誤:
Unable to cast object of type
我可以將IList
轉換成ArrayList
?如何將Ilist投射到ArrayList?
如果是,我該怎麼辦?
IList alls = RetrieveCourseStudents(cf);
ArrayList a = (ArrayList)alls;
這是正確的嗎?
是有錯誤:
Unable to cast object of type
這是所有關於多態性。 ArrayList是來自接口IList的實現。
IList iList = new ArrayList();
從變量ILIST靜態類型爲IList的但它引用了一個ArrayList對象!
沒有從IList到ArrayList的真實轉換,因爲您無法從接口或抽象類實例化/創建對象。
正如意見建議,你應該考慮使用泛型集合而不是
List<Student> students = RetrieveCourseStudents(cf).Cast<Student>().ToList()
Tanx非常多.... – 2012-01-07 15:30:16
你只能將投alls
到ArrayList
如果它已經是ArrayList
,即如果由RetrieveCourseStudents
返回的對象是ArrayList
。
如果沒有,那麼你需要創建一個新的對象,luckly ArrayList
有constructor可以做到這一點:new ArrayList(RetrieveCourseStudents(cf))
值得一提的是,你應該使用泛型(如List<T>
)而不是現在的ArrayList
,所以除非你需要與一些無法更新的舊代碼進行交互,否則我會遠離它。
是, 只有當RetrieveCourseStudents(cf)返回Arraylist類型時,我們才能將IList轉換爲ArrayList。
例如
static void Main(string[] args)
{
IList test1 = GetList();
IList test2= GetIList();
ArrayList list1 = (ArrayList)test1; // Fails
ArrayList list2 = (ArrayList)test2; // Passes
Console.ReadKey();
}
private static IList GetIList()
{
return new ArrayList();
}
private static IList GetList()
{
return new CustomList();
}
既然您評論說您只是想要訂購返回的列表(在另一個評論中說您的類型爲EntityCollection<CourseStudent>
) - 您無需將其轉換爲ArrayList
,只需直接使用該值即可。
您可以使用OrderBy
LINQ擴展方法(以及您使用的變量類型 - IList
也不合適)。
這會工作爲您的需求(其中CourseStudentProperty
是CourseStudent
屬性):
var alls = RetrieveCourseStudents(cf);
var orderedAlls = alls.OrderBy(cs => cs.CourseStudentProperty);
using System;
using System.Collections;
using System.Collections.Generic;
namespace MyILists
{
class Program
{
static void Main(string[] args)
{
IList<int> intArrayList = new ArrayList().ToIList<int>();
intArrayList.Add(1);
intArrayList.Add(2);
//intArrayList.Add("Sample Text"); // Will not compile
foreach (int myInt in intArrayList)
{
Console.WriteLine(" Number : " + myInt.ToString());
}
Console.Read();
}
}
public static class MyExtensions
{
public static IList<T> ToIList<T>(this ArrayList arrayList)
{
IList<T> list = new List<T>(arrayList.Count);
foreach (T instance in arrayList)
{
list.Add(instance);
}
return list;
}
}
}
感謝您發佈一個答案!雖然代碼片段可以回答這個問題,但添加一些附加信息仍然很棒,比如解釋等。 – j0k 2012-10-04 16:14:50
只是用這個簡單的代碼:)
(From x In list).ToArray
你可以使用LINQ聯盟延期。
請注意,您可以將任何類型的IEnumerable與此技術(Array,IList等)結合使用,因此您無需擔心「添加」方法。你必須明白,LINQ產生了不可變的結果,所以如果你想隨後操作集合,那麼你需要使用「ToList()」,「ToDictionary()」或其他。
var list =
(IList<Student>) new []
{
new Student {FirstName = "Jane"},
new Student {FirstName = "Bill"},
};
var allStudents = list.Union(
new [] {new Student {FirstName = "Clancey"}})
.OrderBy(s => s.FirstName).ToList();
allStudents[0].FirstName = "Billy";
foreach (var s in allStudents)
{
Console.WriteLine("FirstName = {0}", s.FirstName);
}
輸出:
FirstName = Billy
FirstName = Clancey
FirstName = Jane
什麼類型不'RetrieveCourseStudents'返回?你爲什麼需要將它轉換爲'ArrayList'?你不應該在新代碼中使用'ArrayList',而是使用泛型集合。 – Oded 2012-01-07 15:01:20
public EntityCollection RetrieveCourseStudents(CF cf); –
2012-01-07 15:29:06
你爲什麼要把它轉換成'ArrayList'? – Oded 2012-01-07 15:30:13