有可能以某种方式将a标记System.Array
为不可变.当置于public-get/private-set之后,它们无法添加,因为它需要重新分配和重新分配,但消费者仍然可以设置他们希望的任何下标:
public class Immy { public string[] { get; private set; } }
我认为readonly
关键字可能会成功,但没有这样的运气.
该框架设计指南建议返回数组的副本.这样,消费者就无法从阵列中更改项目.
// bad code // could still do Path.InvalidPathChars[0] = 'A'; public sealed class Path { public static readonly char[] InvalidPathChars = { '\"', '<', '>', '|' }; }
这些更好:
public static ReadOnlyCollectionGetInvalidPathChars(){ return Array.AsReadOnly(InvalidPathChars); } public static char[] GetInvalidPathChars(){ return (char[])InvalidPathChars.Clone(); }
这些例子直接来自书中.
ReadOnlyCollection
可能就是你要找的东西.它没有Add()
方法.
请参阅基类库中现在可用的不可变集合(当前处于预览中).
您可以使用Array.AsReadOnly方法返回.