gpt4 book ai didi

c# - 如何正确返回接口(interface)列表类型?

转载 作者:太空狗 更新时间:2023-10-29 20:06:09 24 4
gpt4 key购买 nike

使用以下代码,我在“return books”上收到“unable to implicitly cast”编译错误;线。

我认为因为我返回了一个实现 IPublication 的图书对象列表,所以应该可以正常工作?

public interface IPublication {}

public class Book : IPublication {}

public List<IPublication> GetBooks()
{
List<Book> books = new List<Book>();
return books;
}

我注意到,如果我将一本书作为单个 IPublication 对象返回,它工作正常。介绍 List<>需要显式转换。

作为解决方法,我正在使用:

return books.Cast<IPublication>().ToList();

最佳答案

问题是 List<IPublication>是可以容纳任何继承自 IPublication 的类的东西.由于编译器不知道您不会尝试输入 Magazine进入 GetBooks() 的结果,你必须这样写你的函数:

public List<IPublication> GetBooks() 
{
List<IPublication> books = new List<IPublication>();
// put only books in here
return books;
}

如果您的函数返回一个不需要通过索引访问的不可变列表(并且您使用的是 C# 4),您可以这样写:

public IEnumerable<IPublication> GetBooks()         
{
List<Book> books = new List<Book>();
return books;
}

如果你能返回一个IEnumerable<T>但是您使用的是 C# 3,您可以按照 cdhowie 的建议进行操作:

public IEnumerable<IPublication> GetBooks()         
{
List<Book> books = new List<Book>();
return books.Cast<IPublication>();
}

如果您使用的是 C# 2,最好只使用我建议的第一种方法。

关于c# - 如何正确返回接口(interface)列表类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4273805/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com