我需要能够在数组中设置对象,但我不希望能够更改任何单个对象的状态。
答案 0 :(得分:3)
你不能,我害怕。在C#中没有C ++中灵活的“const”等价物。
如果它是你自己的类型,你可以尝试使它不可变(如string
)开始。这对变化非常有效:)
请注意,尽管您的问题要求可写数组,但实际上没有其他类型 - 您无法在最初填充时创建只读的数组...您必须使用其他方法(例如,创建一个{ {1}}包装另一个仅包装器已知的集合)。我知道这在你的特定情况下不是问题,但我只是想我会指出它。如果你使变量引用数组ReadOnlyCollection<T>
,那只会阻止其他代码将变量的值设置为对另一个数组的引用 - 它不会阻止数组本身的变化。
答案 1 :(得分:0)
好吧,你可以声明一个私有变量,然后声明一个引用变量的属性,只定义了getter,这种类型使它只读。
示例:
private int[] myArray =new int[5];
public int[] MyArray
{
get { return MyArray; }
}
答案 2 :(得分:0)
我会考虑使用某种形式的Immutable集合作为更好的设计理念。
选项包括使用yield [1]返回IEnumerable,IEnumerable,ReadOnlyCollection ...请参阅下面的链接以获得更好的解释。
[1]
public IEnumerable<string> Hosts
{
get
{
foreach (var host in _hosts)
{
yield return host;
}
}
}