在C#中将静态数组分配给非静态数组时,它是通过引用还是通过值完成的?

时间:2018-12-29 15:07:26

标签: c# reference static non-static

我的问题是有关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 :(得分:1)

LoadArray中的代码不会更改任何数组。它分配方法返回的内容,这些方法显然是新方法,然后将它们分配给变量。因此,如果将对先前数组的引用存储在某个地方,它将仍然保留其值。

如果已经创建数组并更改了其中的值,则将有所不同。然后您期望看到的将会发生。

但是我们不完全知道这些加载方法中的代码是做什么的。它也可以使用不再分配的内部数组,在这种情况下,它会有所不同。