2017-11-19 4 views
-1

Zuerst i Sie einen Lauf um meinen Code geben, Ich habe eine Klasse, die einige Daten speichert:Wie sollte ich den CS0120 Fehler in meinem Code vermeiden?

public class Balta 
    { 
     public int x; 
     public int y; 
     public int raza; 
     public int cantApa; 
     public int id; 
     public int intersect; 
     public Balta(int xs, int ys, int r, int cApa, int ids, int intersctt) 
     { 
      x = xs; 
      y = ys; 
      raza = r; 
      cantApa = cApa; 
      id = ids; 
      intersect = intersctt; 
     }   
    } 

Zweitens habe ich eine Klasse, die eine Liste der Daten und speichert sie acordingly macht, ich auch Ich beabsichtige, einige Operationen mit diesen Daten durchzuführen, sobald ich diesen lästigen Fehler losgeworden bin.

public class Baltile 
    { 
     public int n; 
     List<Balta> balti = new List<Balta>(); 

     public void populate(Balta balta) 
     { 
      int unitId = balta.id; 
     if (balti.Any(Balta => Balta.id == balta.id)) 
     { 
      int pos = balti.FindIndex(Balta => Balta.id == balta.id); 
      balti[pos] = balta; 
     } 
     else if (balti.Any(Balta => Balta.cantApa == -1) && !balti.Any(Balta => Balta.id == unitId)) 
     {      
       int pos = balti.FindIndex(Balta => Balta.cantApa == -1); 
       balti[pos] = balta;                
     } 
     else //daca nu inseamna ca aduaugi balta la lista 
     { 
      balti.Add(balta); 
     } 
     } 
    } 

Und Haupt sieht so etwas wie dieser

static void Main(string[] args) 
     {    
      Baltile balti = new Baltile(); 
      while (true) 
      { 
       "data input block" 
       for (int i = 0; i < unitCount; i++) 
       { 
       "more data input"  
       if (i>2) 
       { 
       Balta balta = new Balta(x, y, radius, extra, unitId, 0); 
       Baltile.populate(balta);//the CS0120 error is here 
       } 
      } 
      } 
     } 

So CS0120 sagt mir, dies Eine Objektreferenz für die nicht-statisches Feld, Methode erforderlich ist, oder property.This bedeutet statisches Haupt ist so ich kippe eine nicht statische Methode aufrufen, wenn ich richtig verstanden habe? Wenn Sie alles statisch deklarieren, erhalten Sie noch mehr Fehler.

Wie soll ich das umgehen? Ich kann nicht herausfinden, wie ich meinen Code funktionieren lassen kann.

Antwort

0

Mit

Baltile.populate(balta); 

und Baltile einen Klassennamen zu sein, würde dies populate() erfordert eine statische Methode zu sein.

As per MSDN, ist die vollständige Fehlermeldung

Compilerfehler CS0120

Eine Objektreferenz für das nicht statische Feld, Methode oder Eigenschaft 'Mitglied'

Dies sagt erforderlich ist Sie verwenden ein Objekt anstelle einer Klasse. Und es scheint, dass Sie bereits ein Objekt namens balti haben, das diesen Zweck erfüllt. Verwenden Sie also

balti.populate(balta); 

statt. Jetzt rufen Sie die populate()-Methode für eine Instanz (ein Objekt) anstelle der Klasse auf.

Verwandte Themen