根据有关 C# 13 功能的 Microsoft 文档,
params collections
可以与实现 IEnumerable<T>
并具有 Add
方法的类型一起使用。但是,我注意到我可以在 IReadOnlyCollection<T>
参数中使用 params
,即使 IReadOnlyCollection<T>
没有 Add 方法。
void PrintNumbers(params IReadOnlyCollection<int> numbers)
{
foreach (var num in numbers)
{
Console.WriteLine(num);
}
}
PrintNumbers(1, 2, 3, 4, 5);
此代码有效,我可以将单个整数传递给
params
类型的
IReadOnlyCollection<int>
参数
如果
IReadOnlyCollection<T>
没有 Add 方法,那么如何在 params 集合中允许它?
您已经排除了 docs 中非常相关的部分:
params 修饰符不限于数组类型。您现在可以使用 params 具有任何可识别的集合类型,包括 System.Span, System.ReadOnlySpan 以及实现的类型 System.Collections.Generic.IEnumerable 并有一个 Add 方法。
在 除了具体类型之外,接口 System.Collections.Generic.IEnumerable, System.Collections.Generic.IReadOnlyCollection, System.Collections.Generic.IReadOnlyList, System.Collections.Generic.ICollection,以及 也可以使用 System.Collections.Generic.IList。
对
Add
方法的要求是自定义 IEnumerable<T>
类型,以便编译器可以确保它可以创建它。