2017-04-10 142 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; 
}