当“IReadOnlyCollection<T>”没有 Add 方法时,参数“IReadOnlyCollection<T>”如何工作?

问题描述 投票:0回答:1

根据有关 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 集合中允许它?

c#
1个回答
0
投票

您已经排除了 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>
类型,以便编译器可以确保它可以创建它。

© www.soinside.com 2019 - 2024. All rights reserved.