2017-04-10 95 views
0

我有一個可觀察的集合,名爲players,其中包含各種Player對象。 所有對象都繼承自Player對象的屬性,但不同類別的一些獨特的特性,如GoalkeeperDefender訪問繼承類?

如何檢查對象的類型觀察集合並相應地改變其獨特的性能?

foreach (Player p in players) 
      { 
       if(p.GetType().Name == "Goalkeeper") 
       { 
        p.Saves == 100; 
       } 
       else if (p.GetType().Name == "Defender") 
       { 
        p.Tackles = 50; 
       } 



      } 
+0

道歉,我有一個錯字,但這並不能解決問題。 「守門員」對象具有「保存」屬性,而「後衛」對象則不具有。 –

回答

6

通過使用isas

foreach (var p in players) 
{ 
    if (p is Goalkeeper) 
    { 
     var goalie = p as Goalkeeper; 
     goalie.Saves == 100; 
    } 
    else if (p is Defender) 
    { 
     var defender = p as Defender; 
     defender.Tackles = 50; 
    } 
} 

作爲一個說明:C#7(在Visual Studio 2017年獲得)有一些新的語法來簡化這些刪除,需要有獨立的isas聲明,以及對switch聲明的一些增強。

switch(p) 
{ 
    case Goalkeeper goalie: 
     goalie.Saves == 100; 
     break; 

    case Defender defender: 
     defender.Tackles = 50; 
     break; 

    /* ... */ 
    default: 
     throw new Exception("Unknown Player Type"); 
     break; 
}