gpt4 book ai didi

c# - 公开接口(interface)而不是具体类

转载 作者:行者123 更新时间:2023-11-30 20:23:57 24 4
gpt4 key购买 nike

我最近读到一些关于在公开集合而不是具体实现时使用接口(interface)(IEnumerable 而不是 List)的内容。我现在正尝试在我的代码中这样做。但是,当我公开一个返回 IEnumerable 的属性时,我遇到了一些不允许 null 作为返回值的困难。示例:

public class HumanResource
{
public IEnumerable<EmployeeModel> Employees
{
get
{
// return what?
}
}
}

我应该在 getter 中返回什么?我不想为此使用自动属性,因为我想避免空值。我想要的是返回一个没有项目的新集合。当然,我可以返回任何实现 IEnumerable 的类型,但是该类的外部用户怎么知道呢?还是我对这个公开接口(interface)而不是具体实现的理解有误?

编辑:删除二传手

最佳答案

Of course I can return any type that implements IEnumerable but how will the external user of the class know that?

他们不必知道这一点,这就是重点。

您的属性(property) promise 返回 IEnumerable<EmplyeeModel> ,而这正是发生的事情。您的代码返回哪个实现此接口(interface)的类并不重要。

What I want is to return a new collection with no items.

所以,Enumerable.Empty<EmplyeeModel>()new List<EmployeeModel>()会做的很好。


在设计 API 时,您需要考虑消费者将如何处理您返回的数据类型,并据此做出决定。

通常是 IEnumerable<T>收藏适合每个人。当他们想要在列表中时,他们可以做 new List<T>(yourEnumerable) , 或 yourEnumerable.ToArray()将其用作数组。

关于c# - 公开接口(interface)而不是具体类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27720587/

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