更改只读数组的值

问题描述

我在 C# 中有这个锯齿状数组:

    private static readonly float[][] Numbers = {
    new float[]{ 0.3f,0.4f,0.5}};

如何覆盖该值?

public static void SetNewNumbers(float[][] num){
    Numbers = num;}

由于只读,这不起作用,应该添加什么? (我无法改变关于 Numbers 的任何事情)

解决方法

这是您需要的信息:

在字段声明中,readonly 表示对字段的赋值只能作为声明的一部分或在同一类的构造函数中发生。可以在字段声明和构造函数中多次分配和重新分配只读字段。

当您声明 Numbers 为只读时,这是不允许的

Numbers = num

因为你不能改变引用但你可以修改对象...

所以这是有效的:

Numbers[0] = new[] {0.0f,0.0f,0.0f};
Numbers[0][1] = 1.0f;
,

假设新数组匹配,您可以重新分配 Numbers 中的每个值:

void ResetNumbers(float[][] num) {
    if (num.Length != Numbers.Length || num[0].Length != Numbers[0].Length)
        throw new ArgumentException($"{nameof(num)} dimensions incorrect");

    for (int j1 = 0; j1 < Numbers.Length; ++j1) {
        for (int j2 = 0; j2 < Numbers[j1].Length; ++j2) {
            Numbers[j1][j2] = num[j1][j2];
        }
    }
}