1

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

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

如何覆盖该值?

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

由于只读,这不起作用,应该添加什么?(我不能改变任何关于数字的东西)

4

2 回答 2

2

这是您需要的信息:

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

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

Numbers = num

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

所以这是有效的:

Numbers[0] = new[] {0.0f, 0.0f, 0.0f};
Numbers[0][1] = 1.0f;
于 2021-02-12T10:24:05.323 回答
1

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];
        }
    }
}
于 2021-02-12T21:22:20.867 回答