如果泛型类型T是一个集合,如何将其转换为空集合

本文关键字:集合 空集 转换 一个 泛型类型 如果 | 更新日期: 2023-09-27 17:58:34

我想要一个类似于default(T)的运算符,但如果T是集合类型而不是null,则返回一个空集合。您将如何在PCL库中做到这一点?

示例:

Where T are following types
T -> string
T1 -> IEnumerable<string>
T2 -> IList<string>
default value would be returned as following:
Default<T> -> null
Default<T1> -> IEnumerable<string> (empty)
Default<T2> -> IList<string> (empty)

如果泛型类型T是一个集合,如何将其转换为空集合

您要查找的方法是静态Enumerable.Empty<T>()。我只是不知道你说的"收藏类型"是什么意思。

var defaultAny             = default(T);
var defaultCollectionOfAny = Enumerable.Empty<T>();

编辑

跟进您的最新问题:任何给定的接口都应该使用什么具体类型?对于IList<string>,您可能想要一个简单的List<string>。但这并不总是那么明显。

考虑一下这个虚构的方法调用:

var collection = Default(IEnumerable<KeyValuePair<string, string>>)

可能的退货类型:

  • Dictionary<string, string>
  • List<KeyValuePair<string, string>>
  • KeyValuePair<string, string>[]