2017-06-10 7 views
0

私はC#とプログラミングにはまったく新しいです。 私は "Predator"と "Herbivorous"の親である "Animals"クラスを作成するタスクを持っています。これら2つはそれぞれ "Wolf"、 "Fox"、 "Hare"、 "Deer"の親です。だから私はそれをしました。次のステップは、これらのオブジェクトの配列を作成し、そこに存在する捕食者と草食動物の数を並べることです。これは問題が発生する場所です。C#カスタムクラス配列のカスタムクラスオブジェクトを数えよう

私のクラス(クラスの機能は任意のものとすることができる):

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; 
    } 
} 

私の主:私はコンパイルの問題が持って

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++; 
       } 
      } 
     } 
    }` 

そして:

エラーCS0266は、暗黙的にすることはできません「Problem2.Animal」を に「Problem2.Herbivorous」に変換します。明示的な変換が存在します( キャストはありません)

何が問題になりましたか?または私の "動物"の配列で私の "捕食者"と "草食動物"を数える正しい方法がありますか? THX

+0

あなたは(これは' arrayOfAnimals.OfTypeは()カウントを行うことができます):。forループが、そうでなければ文句を言わない何かを数えます。それは非常に簡単なアプローチです。基本を使ってコードを書くことを学んでいる場合や、必要なものを表現するのに最も効率的な方法を望む場合のみに依存します。 – Enigmativity

+0

追加のタスクは、そのカウンタを "is"または "as"で動作させることでした。ですから、しばらくして私はこのようなコードを書き直しました。「var herbivirousCounter = allAnimals.Where(x => xはProblem2.Herbivorousです).ToList(); ' –

答えて

1
Problem2.Herbivorous myHerbivorousAnimal = arrayOfAnimals[i]; 

あなたはHerbivorosAnimalをキャストしようとしているが、すべてのAnimalHerbivorosではありません。あなただけの現在の配列エントリにisチェック行うことができます。私は、余分なブール値を使用していますが、ちょうどif

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

を使用して、あなたは外にあなたがカウンターに置く叫ぶないだろう、途中で

check = arrayOfAnimals[i] is Problem2.Herbivorous; 

を`;

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

thx。私はそれを考え出して投稿しました。投稿を削除したいとあなたのコメントを見ました。もう一度THXを解明してください。乾杯 –

関連する問題