2015-11-04 53 views
0

我目前正在開發c#中的一個小文本冒險,但我對這門語言仍然很陌生,所以我遇到了一些問題。在函數中使用列表

例如,我使用List來保存農場中植物的名稱。我不知道爲什麼我在這裏得到一個錯誤:

public static void InitializeList() 
    { 
     List<string> plants = new List<string>(); 
     plants.Add("wheat"); 

    } 
public static void plantCrop(string crop) 
    { 
     if (plants.Contains(crop.ToLower())) 
     { 

     } 
    } 

程序告訴我,_plants_ doesn't exist in the current content

我可以解決這個問題,而不需要從函數InitializeList()中刪除列表?我在Main程序中首先調用List。

回答

2

plants是一個局部變量。使其成爲類成員以從其他方法訪問它。

0

將方法InitializeList中的plants初始化爲成員變量而非局部變量。

List<string> plants = new List<string>(); 
1

植物是方法中的局部變量,您無法通過不同的方法訪問它。

1

您的植物列表存在於InitializeList上下文中。 如果您創建了一個字段,則可以使用其他方法訪問該字段。

private static List<string> plants; 
public static void InitializeList() 
{ 
    plants = new List<string>(); 
    plants.Add("wheat"); 
} 
public static void plantCrop(string crop) 
{ 
    if (plants.Contains(crop.ToLower())) 
    { 
    } 
} 
+1

不確定它應該是靜態的,但肯定需要在更高的範圍內。 – juharr

+0

@juharr如果方法「使用」它是靜態的,沒有什麼選擇(除了在它的靜態方法裏面創建一個封閉類的實例,這看起來很奇怪)。但我同意也許該方法要麼不應該是靜態的 – Sehnsucht

+0

@Sehnsucht是的,錯過了。 – juharr

0

請將您的列表(Plants)定義爲全局。你不能在其他函數中定義函數中的局部變量。

var plants = new List<string>(); 
public static void InitializeList() 
{ 
    plants = new List<string>(); 
    plants.Add("wheat"); 

} 
public static void plantCrop(string crop) 
{ 
    if (plants.Contains(crop.ToLower())) 
    {} 
}