閱讀英文

共用方式為


編譯器錯誤 CS0459

無法取得唯讀區域變數的位址

使用 C# 語言時,有三種常見的案例會產生唯讀區域變數: foreachusingfixed。 在上述每一種情況下,不允許您寫入唯讀區域變數,或取得它的位址。 編譯器發現您正在嘗試取得唯讀區域變數的位址時,會產生這個錯誤。

範例

下列範例會嘗試在 foreach 迴圈和 fixed 陳述式區塊中取得唯讀區域變數的位址時產生 CS0459:

// CS0459.cs
// compile with: /unsafe

class Program
{
    public unsafe void M1()
    {
        int[] ints = new int[] { 1, 2, 3 };
        foreach (int i in ints)
        {
            int *j = &i;  // CS0459
        }

        fixed (int *i = &_i)
        {
            int **j = &i;  // CS0459
        }
    }

    private int _i = 0;
}

注意

Roslyn 編譯器已更新,而且從 Visual Studio 2017 15.5 版開始,已移除此編譯器錯誤,因此,先前的程式碼可以透過此版本和更新版本成功編譯。