Con el siguiente código, recibo un error de compilación "no se puede generar implícitamente" en los "libros de devolución"; línea.¿Cómo devuelvo correctamente un tipo de Lista de interfaces?
Pensé que porque estoy devolviendo una lista de objetos del libro que implementan IPublication esto debería funcionar bien?
public interface IPublication {}
public class Book : IPublication {}
public List<IPublication> GetBooks()
{
List<Book> books = new List<Book>();
return books;
}
Observo que si devuelvo un solo libro como un solo objeto IPublication, funciona bien. Al presentar el List<>
se requiere un lanzamiento explícito.
Como solución que estoy utilizando:
return books.Cast<IPublication>().ToList();
En tu último ejemplo, también podrías' devolver libros.Cast < IPublication>(); 'en C# 3 e inferior. No duplicará la lista, sino que devolverá un enumerable que arrojará cada elemento al tipo de interfaz uno por uno, sin requerir casi ninguna memoria para hacerlo. – cdhowie
Buen punto, cdhowie. Sin embargo, solo funciona en C# 3 y superior. La versión 2 no tenía métodos de extensión o una función 'Cast'. Por supuesto, puede importar la clase 'Enumerable' y llamarla estáticamente, pero probablemente no valga la pena el esfuerzo. – Gabe