2017-06-10 7 views
0

Ich bin neu in C# und Programmierung überhaupt. Ich habe eine Aufgabe, eine Klasse "Animals" zu erstellen, die ein Elternteil für "Predator" und "Herbivorous" ist und diese 2 sind Eltern von "Wolf", "Fox", "Hase", "Deer" jeweils. Also habe ich das gemacht. Der nächste Schritt besteht darin, ein Array dieser Objekte zu erstellen und zu zählen, wie viele Raubtiere und pflanzenfressende Tiere sich dort befinden. Und das ist der Ort, an dem das Problem auftritt. (Funktionalität der Klassen beliebig sein kann)C# Benutzerdefinierte Klassenobjekte im benutzerdefinierten Klassen-Array zählen

Meine Klassen:

public abstract class Animal 
{ 

} 

public abstract class Predator : Animal 
{ 
    protected string predatorName; 
    public Predator (string typeOfAnimal) 
    { 
     this.predatorName = typeOfAnimal; 
    } 
} 

public abstract class Herbivorous : Animal 
{ 
    protected string herbivorousName; 
    public Herbivorous (string typeOfAnimal) 
    { 
     this.herbivorousName = typeOfAnimal; 
    } 
} 

public class Wolf : Predator 
{ 
    protected string wolfName; 
    public Wolf (string typeOfAnimal, string nameOfTheWolf) : base(typeOfAnimal) 
    { 
     this.wolfName = nameOfTheWolf; 
    } 
} 

public class Fox : Predator 
{ 
    protected string foxName; 
    public Fox(string typeOfAnimal, string nameOfTheFox) : base(typeOfAnimal) 
    { 
     this.foxName = nameOfTheFox; 
    } 
} 

public class Hare : Herbivorous 
{ 
    protected string hareName; 
    public Hare(string typeOfAnimal, string nameOfTheHare) : base(typeOfAnimal) 
    { 
     this.hareName = nameOfTheHare; 
    } 
} 

public class Deer : Herbivorous 
{ 
    protected string deerName; 
    public Deer(string typeOfAnimal, string nameOfTheDeer) : base(typeOfAnimal) 
    { 
     this.deerName = nameOfTheDeer; 
    } 
} 

Mein Haupt:

class Program 
{ 
     static void Main(string[] args) 
     {     
      Problem2.Wolf wolf1 = new Problem2.Wolf("Predator", "Ghost"); 
      Problem2.Wolf wolf2 = new Problem2.Wolf("Predator", "Nymeria"); 
      Problem2.Wolf wolf3 = new Problem2.Wolf("Predator", "Grey Wind"); 

      Problem2.Fox fox1 = new Problem2.Fox("Predator", "Eevee"); 
      Problem2.Fox fox2 = new Problem2.Fox("Predator", "Vulpix"); 

      Problem2.Hare hare1 = new Problem2.Hare("Herbivorous", "Bugs Bunny"); 
      Problem2.Hare hare2 = new Problem2.Hare("Herbivorous", "Easter Bunny"); 

      Problem2.Deer deer1 = new Problem2.Deer("Herbivorous", "Bambi"); 
      Problem2.Deer deer2 = new Problem2.Deer("Herbivorous", "Faline"); 
      Problem2.Deer deer3 = new Problem2.Deer("Herbivorous", "Sven"); 
      Problem2.Deer deer4 = new Problem2.Deer("Herbivorous", "Mena"); 

      Problem2.Animal[] arrayOfAnimals = new Problem2.Animal[] {wolf1, wolf2, wolf3, fox1, fox2, deer1, deer2, deer3, deer4, hare1, hare2}; 




      for (int i = 0; i < arrayOfAnimals.Length; i++) 
      { 
       int counter = 0; 
       bool check = false; 

       Problem2.Herbivorous myHerbivorousAnimal = arrayOfAnimals[i]; 
       check = myHerbivorousAnimal is Problem2.Herbivorous; 

       if (check == true) 
       { 
        counter++; 
       } 
      } 
     } 
    }` 

Und ich eine Zusammenstellung Problem haben:

CS0266 Fehler nicht implizit Konvertieren Sie den Typ 'Problem2.Animal' in 'Problem2.Herbivorous'. Eine explizite Konvertierung existiert (fehlt dir ein Cast?)

also was ist schiefgelaufen? Oder gibt es einen richtigen Weg, um meine "Predators" und "Herbivorous" in meinem Array von "Animals" zu zählen? THX

+0

Sie können dies tun 'arrayOfAnimals.OfType () Count();'. Das ist ein sehr einfacher Ansatz. Es hängt nur davon ab, ob Sie lernen, mit den Grundlagen zu programmieren oder die effizienteste Möglichkeit zu haben, das auszudrücken, was Sie brauchen. – Enigmativity

+0

war eine zusätzliche Aufgabe, diesen Zähler mit dem "ist" oder "wie" arbeiten zu lassen. Nach einer Weile schrieb ich meinen Code wie folgt um: 'var herbivirousCounter = allAnimals.Where (x => x ist Problem2.Herbivorous) .ToList(); ' –

Antwort

1
Problem2.Herbivorous myHerbivorousAnimal = arrayOfAnimals[i]; 

Sie versuchen, ein Animal in Herbivoros, werfen aber nicht jeder Animal ist Herbivoros. Sie können nur die is Prüfung auf dem aktuellen Array-Eintrag tun:

check = arrayOfAnimals[i] is Problem2.Herbivorous; 

durch die Art und Weise, würde ich nicht extra bool verwenden, aber nur if

if (arrayOfAnimals[i] is Problem2.Herbivorous) 
{ 
    counter++; 
} 

verwenden Und Sie rufen Sie begegnen aus put die for Schleife, sonst zählen sie nicht nichts.

int counter = 0; 
for (int i = 0; i < arrayOfAnimals.Length; i++) 
{ 
    if (arrayOfAnimals[i] is Problem2.Herbivorous) 
    { 
     counter++; 
    } 
} 
+0

thx. Ich habe gepostet, dann habe ich es herausgefunden. Wollte den Beitrag löschen und ich habe Ihren Kommentar gesehen. THX nochmal zur Klärung. Prost –

Verwandte Themen