.NET 中可以使用不可变数组吗?

2024-03-04

是否有可能以某种方式标记System.Array作为不可变的。当放在 public-get/private-set 后面时,它们无法添加到其中,因为它需要重新分配和重新分配,但消费者仍然可以设置他们希望的任何下标:

public class Immy
{
    public string[] { get; private set; }
}

我以为readonly关键字可能会起作用,但没有这样的运气。


The 框架设计指南 https://rads.stackoverflow.com/amzn/click/com/0321246756建议返回数组的副本。这样,消费者就无法更改数组中的项目。

// bad code
// could still do Path.InvalidPathChars[0] = 'A';
public sealed class Path {
   public static readonly char[] InvalidPathChars = 
      { '\"', '<', '>', '|' };
}

这些更好:

public static ReadOnlyCollection<char> GetInvalidPathChars(){
   return Array.AsReadOnly(InvalidPathChars);
}

public static char[] GetInvalidPathChars(){
   return (char[])InvalidPathChars.Clone();
}

这些例子直接来自书中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET 中可以使用不可变数组吗? 的相关文章

随机推荐