編譯器錯誤 CS0459
無法取得唯讀區域變數的位址
使用 C# 語言時,有三種常見的案例會產生唯讀區域變數: foreach
、 using
和 fixed
。 在上述每一種情況下,不允許您寫入唯讀區域變數,或取得它的位址。 編譯器發現您正在嘗試取得唯讀區域變數的位址時,會產生這個錯誤。
下列範例會嘗試在 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 版開始,已移除此編譯器錯誤,因此,先前的程式碼可以透過此版本和更新版本成功編譯。