3
在下面的代碼中,爲什麼數組(arr)必須是靜態的?C#LINQ目標需要是靜態的
如果我刪除了靜態,那麼在LINQ查詢中使用它將不再可見。
class A
{
static int[] arr = { 1, 2, 3, 4 };
IEnumerable<int> result = from i in arr where i < 10 select i;
}
謝謝。
在下面的代碼中,爲什麼數組(arr)必須是靜態的?C#LINQ目標需要是靜態的
如果我刪除了靜態,那麼在LINQ查詢中使用它將不再可見。
class A
{
static int[] arr = { 1, 2, 3, 4 };
IEnumerable<int> result = from i in arr where i < 10 select i;
}
謝謝。
您不能訪問其他類的實例變量,如果你直接使用變量初始化初始化變量 - 你可以將代碼移到構造函數來代替:
class A
{
int[] arr = { 1, 2, 3, 4 };
IEnumerable<int> result;
public A()
{
result = from i in arr where i < 10 select i;
}
}
從C#規範,10.5.5.2實例字段初始化:
一個實例 字段變量初始值不能引用該實例 被創建。因此,編譯時錯誤在變量初始值設定項中引用此 ,因爲它是 編譯時錯誤的變量 初始化程序通過簡單名稱引用任何實例 成員。
這是有道理的,因爲變量初始化器是在基類構造函數之前執行的,因此類實例尚未完全「構造」。
靜態構件的構建順序是什麼? – Jake
奇怪的是,當你將它們都改爲靜態時它就起作用了。 –
分配內存時,是否有任何特定的順序?從這個討論我推斷,靜態數據首先被分配,並與實例分開,這就是爲什麼在這種情況下使用靜態工作,而不是使用靜態會破壞規則,如@BrokenGlass – Jake