При назначении статического массива нестатическому массиву в C # это делается по ссылке или по значению? - PullRequest
0 голосов
/ 29 декабря 2018

Мой вопрос касается поведения языка C #.У меня есть код, где у меня есть несколько статических массивов с различными значениями и массив нестатических полей, который устанавливается в один из этих массивов в разное время.Я предполагаю, что если бы ниже вызывался UpdateArrayToUse, он установил бы его по ссылке, что означает, что если бы LoadArrays был вызван снова позже с изменением значений диска, то нестатическое поле Options уже изменилось бы.Тем не менее, это не то поведение, которое я вижу.Мне любопытно узнать, есть ли у кого-нибудь понимание этого.

    private static string[] StaticArray1;
    private static string[] StaticArray2;

    public static void LoadArrays()
    {
        //Loads arrays from disk, can be changed elsewhere
        StaticArray1 = LoadArray1();
        StaticArray2 = LoadArray2(); 
    }

    public void UpdateArrayToUse(int i)
    {
        if(i == 1){
            Options = StaticArray1;
            return;
        }

        Options = StaticArray2;
    }

    public string[] Options;

1 Ответ

0 голосов
/ 29 декабря 2018

Код в LoadArray не меняет никаких массивов.Он присваивает то, что возвращают методы, которые, очевидно, являются новыми, и вы присваиваете их переменным.Поэтому, если вы сохраните ссылку на предыдущий массив где-то, он все равно сохранит свое значение.

Было бы иначе, если бы массивы были уже созданы, и вы изменили значения в них.Тогда то, что вы ожидали увидеть, произойдет.

Но мы не знаем точно, что делает код внутри этих методов загрузки.Он может также использовать внутренний массив, который больше не выделяется, и в этом случае он снова будет другим.

...