Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 方法应该返回什么ReadOnlyCollection类型?_C#_.net_Generics_Collections - Fatal编程技术网

C# 方法应该返回什么ReadOnlyCollection类型?

C# 方法应该返回什么ReadOnlyCollection类型?,c#,.net,generics,collections,C#,.net,Generics,Collections,我已经看到了和它相关的其他问题,但我仍然对这个问题感到困惑 为了演示的目的,让我们假设我有一个类,在这个类中我公开了一个公共方法,如下所示: public ReadOnlyCollection<Type> GetReadOnlyCollection(IEnumerable<Type> enumerable) { List<Type> list = enumerable.ToList(); return new ReadOnlyCollectio

我已经看到了和它相关的其他问题,但我仍然对这个问题感到困惑

为了演示的目的,让我们假设我有一个类,在这个类中我公开了一个公共方法,如下所示:

public ReadOnlyCollection<Type> GetReadOnlyCollection(IEnumerable<Type> enumerable)
{
    List<Type> list = enumerable.ToList();
    return new ReadOnlyCollection<Type>(list);
}
public ReadOnlyCollection GetReadOnlyCollection(IEnumerable可枚举)
{
List=enumerable.ToList();
返回新的只读集合(列表);
}

接下来,我的方法是否应该返回实际的集合类(
ReadOnlyCollection
collection
,等等)或它们的接口(
IList
ICollection
,等等)如果我希望返回一个
ReadOnlyCollection
特别是?

如果您返回一个尽可能通用的类型,您可以灵活地在以后更改实现。当然,您必须返回一个对消费者有用的类型。因此,一般来说,返回接口类型更好,也可以返回更通用的类型,只要这不会在用户端的使用中造成任何问题。

我最初的问题不是非常明确的定义;应考虑以下几点:

  • 用户是否只需要枚举代码?如果是这样,
    IEnumerable
    可能就足够了
  • 用户是否应该知道集合是只读的?如果是这样,
    IReadOnlyCollection
    可能没问题
  • 是否要阻止用户将只读集合强制转换为可变类型?如果是,请使用
    System.Collections.immutable
    中的不可变集合
以下问题提供了一些有用的答案:


没有“一个答案”。但是,一般来说,您应该编程到一个接口,而不是一个特定的类。IMHO…这取决于我的猜测,如果您打算重用/派生类,那么接口是肯定的,否则主要关注的是性能。可能的副本