小编Fra*_*spo的帖子

Collection<T> 是只读的?!使用 params 关键字实例化集合有什么问题?

我使用的是 Unity 版本 2023.1.6。我有一个继承自 的自定义集合Collection<T>。如果我实例化一个集合,然后尝试使用该.Add()方法,我会收到以下错误:

System.NotSupportedException: Collection is read-only.
  at System.Collections.ObjectModel.Collection`1[T].Add (T item) [0x0000d] in <46a5f68c38604d68a85231bbf55f6b8f>:0 
Run Code Online (Sandbox Code Playgroud)

我注意到仅当我使用此构造函数实例化集合时才会发生此错误:

public Selection(params T[] selectionElements) : base(selectionElements) { }
Run Code Online (Sandbox Code Playgroud)

我通过将构造函数更改为以下内容来修复错误:

public Selection(params T[] selectionElements) : base(selectionElements.ToList()) { }
Run Code Online (Sandbox Code Playgroud)

我不知道 LINQ 在幕后做了什么,甚至不知道为什么它有效(我刚刚尝试过......),所以我还有几个问题:

  • 使用关键字有什么问题params

  • 是否params创建数组?如果是,为什么不能将数组作为 传递IList<T>?如果不行为什么没有编译时错误?

  • 为什么 LINQ 方法修复了错误?

c# arrays collections parameters readonly

2
推荐指数
1
解决办法
67
查看次数

标签 统计

arrays ×1

c# ×1

collections ×1

parameters ×1

readonly ×1