2017-01-18 2 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 Error Ссылка на объекте требуется для

Update Изменяется нестатические поля, метода или свойства «ExtractImages.World.continents»

Первого в файле класса я использую World перед его использованием в form1: Когда в Form1 я создаю новый экземпляр для World, он будет пустым.

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. Однако имейте в виду, что в конструкторе вы просто создаете пустой список. Вы не представили список continenets. Поэтому каждый раз, когда вы создаете новый объект World, continents будет пустым списком объектов Continent. Вы должны поставить что-то другое там, чем пустой список, так как foreach, который у вас на вашем посту, будет бессмысленным.

var world = new World(); 

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

Я забыл упомянуть, что сначала использую World в файле класса, поэтому, если я создаю новый экземпляр World в form1, он будет пустым. Я уточню свой вопрос. –

+0

@ DanielDejunior не проблема. Вы говорите, что используете «Мир». Как? Разве вы не создали экземпляр этого класса? – Christos

Смежные вопросы