2017-01-18 20 views
-1

在类文件的顶部,我增加一类:为什么我得到错误,该变量需要是静态的?

public class World 
{ 
    public List<Continent> continents; 

    public World() 
    { 
     continents = new List<Continent>(); 
    } 
} 

public class Continent 
{ 
    public string name; 
    public List<Country> countries { get; set; } 

    public Continent() 
    { 
     name = string.Empty; 
     countries = new List<Country>(); 
    } 
} 

public class Country 
{ 
    public string name { get; set; } 
    public List<string> imageUrls { get; set; } 
    public Country() 
    { 
     name = string.Empty; 
     imageUrls = new List<string>(); 
    } 
} 

当Form1中使用它:

foreach (ExtractImages.Continent continent in ExtractImages.World.continents) 
{ 
    Console.WriteLine(continent.name); 
    foreach (ExtractImages.Country country in continent.countries) 
    { 
     Console.WriteLine(country.name); 
     foreach (string imageUri in country.imageUrls) 
     { 
      Console.WriteLine(imageUri); 
     } 
    } 
} 

我得到的错误在Form1上:

ExtractImages.World.continents 

上线:

foreach (ExtractImages.Continent continent in ExtractImages.World.continents) 

严重性代码说明项目文件的线路抑制状态 错误CS0120的对象引用需要非静态字段,方法或属性“ExtractImages.World.continents”

更新

第一在类文件中,我使用世界之前,它在form1中使用它: 当我在Form1中创建世界的新实例时,它将全部为空。

public void ImagesLinks() 
     { 
      try 
      { 
       int counter = 0; 

       foreach (string countryCode in countriescodes) 
       { 
        Country country = new Country(); 
        country.name = countriesnames[counter]; 
        List<string> imageUrl = new List<string>(); 
        counter++; 
        for (int cnt = 0; cnt < DatesAndTimes.Count(); cnt++) 
        { 
         string imageUrlIrTrue = firstUrlPart + countryCode + secondUrlPart + DatesAndTimes[cnt] + thirdUrlPart + "true"; 
         string imageUrlIrFalse = firstUrlPart + countryCode + secondUrlPart + DatesAndTimes[cnt] + thirdUrlPart + "false"; 
         imageUrl.Add(imageUrlIrTrue); 
         imageUrl.Add(imageUrlIrFalse); 

         if (cnt == 9) 
         { 
          cnt = 0; 
          break; 
         } 
        } 
        country.imageUrls = imageUrl; 
        Europe.countries.Add(country); 

       } 
       world.continents.Add(Europe); 
      } 

这是在Form1的现在:

ExtractImages.World world = new ExtractImages.World(); 
      foreach (ExtractImages.Continent continent in world.continents) 
      { 
       Console.WriteLine(continent.name); 
       foreach (ExtractImages.Country country in continent.countries) 
       { 
        Console.WriteLine(country.name); 
        foreach (string imageUri in country.imageUrls) 
        { 
         Console.WriteLine(imageUri); 
        } 
       } 
      } 
+1

你像一个静态对象调用它时,它不是一成不变的。 – Abion47

+1

因为您将它用作静态类。你不需要在类型的*实例*上使用'.continents'。 – Rob

回答

1

您应该首先创建类的实例,因为continents是一个实例字段一个static field,然后访问continents。但是,请记住,在您的构造函数中,您只需创建一个空列表。您不提供任何​​的列表。因此,每次创建新的世界对象时,continents都将是空对象列表Continent。您应该提供与空白列表不同的东西,因为您在帖子中的foreach将毫无意义。

var world = new World(); 

foreach (var continent in world.continents) 
{ 
    // ... 
} 
+0

我忘了提及我在类文件中首先使用World,所以如果我在Form1中创建World的新实例,它将是空的。我会更新我的问题。 –

+0

@DanielDejunior不是问题。你说你使用'世界'。怎么样?你不是已经创建了这个类的实例吗? – Christos

相关问题