Dlaczego nie mogę obsłużyć List<ObjBase>
jako List<Obj>
? Dlaczego nie następujące prace:C# Casting a List <ObjBase> jako List <Obj>
internal class ObjBase
{
}
internal class Obj : ObjBase
{
}
internal class ObjManager
{
internal List<Obj> returnStuff()
{
return getSomeStuff() as List<Obj>;
}
private List<ObjBase> getSomeStuff()
{
return new List<ObjBase>();
}
}
Zamiast muszę to zrobić:
internal class ObjBase
{
}
internal class Obj : ObjBase
{
}
internal class ObjManager
{
internal List<Obj> returnStuff()
{
List<ObjBase> returnedList = getSomeStuff();
List<Obj> listToReturn = new List<Obj>(returnedList.Count);
foreach (ObjBase currentBaseObject in returnedList)
{
listToReturn.Add(currentBaseObject as Obj);
}
return listToReturn;
}
private List<ObjBase> getSomeStuff()
{
return new List<ObjBase>();
}
}
otrzymuję następujący błąd w Visual Studio 2008 (skrócony dla czytelności):
nie potrafisz Konwertuj typ "Lista" na "Lista" poprzez konwersję referencyjną, konwersję boksu, konwersję rozpakowywania, konwersję owijania lub konwersję typu null
Dzięki.
-1: Dup wielu pytań tutaj, w tym http://stackoverflow.com/questions/1263489/how- do-i-upcast-a-collection-of-base-class-in-c/1263514 # 1263514 i te wymienione w odpowiedzi poniżej –
Prawdopodobny duplikat [.NET Casting Generic List] (http://stackoverflow.com/questions/674715/net-casting-generic-list) –