我有一个名为players包含各种Player对象的可观察集合.所有对象继承的属性Player的对象,但为不同的类别与一些独特的性能,如Goalkeeper和Defender等
如何检查可观察集合中的对象类型并相应地更改其唯一属性?
foreach (Player p in players)
{
if(p.GetType().Name == "Goalkeeper")
{
p.Saves == 100;
}
else if (p.GetType().Name == "Defender")
{
p.Tackles = 50;
}
}
Run Code Online (Sandbox Code Playgroud)
通过使用is和as:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
作为注释:C#7(在Visual Studio 2017中可用)有一些新的语法来简化这些,以消除对单独is和as语句的需要,以及对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;
}
Run Code Online (Sandbox Code Playgroud)