В общем, лучше не полагаться на finalize()
, чтобы делать очистку и т. д.
Согласно Javadoc (что было бы полезно прочитать), это :
Вызывается сборщиком мусора на объекте, когда сбор мусора определяет, что больше нет ссылок на объект.
blockquote>Как указал Йоахим, это может никогда не произойти в жизни программы, если объект всегда доступен.
Кроме того, сборщик мусора не может запускаться в любое конкретное время. В общем, то, что я пытаюсь сказать,
finalize()
, вероятно, не самый лучший метод для использования вообще, если для этого не требуется что-то конкретное.
Если вы используете C # 3.0 (Visual Studio 2008), вы можете:
using System.Linq;
List<B> bList = foo.GetListOfA().Cast<B>().ToList();
Это может теперь быть сделано следующий способ использовать linq
List<A> listOfA;
List<B> listOfB = listOfA.Select(a => a as B).ToList();
Используя System.Linq, вы можете сказать
List<B> bList = foo.GetListOfA().Cast<B>().ToList()
Или
var bs = foo.GetListOfA().Cast<B>()
Или
static class AExts
{
public List<B> AsB( this List<A> list )
{
return list.Cast<B>().ToList();
}
}
List<B> bList = foo.GetListOfA().AsB();
Или
static class FooExts
{
public List<B> AsB( this Foo foo )
{
return list.GetListOfA().AsB();
}
}
List<B> bList = foo.AsB();
Или, если у вас нет / не можете / не использовать Linq, алгоритмы в PowerCollections имеют то же самое
И я не смотрел на другой ответ, хотя он, вероятно, говорит то же самое!
Вы не можете. Фактически вы должны создать новый List
и добавить все элементы из исходного списка в новый список.
Самый простой способ сделать это, не считая написания собственного метода для этого, заключается в использовании Linq (см. другие ответы).