访问继承的classe?

Ger*_* Mc 0 c# oop wpf loops

我有一个名为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;
                }



            }
Run Code Online (Sandbox Code Playgroud)

cra*_*str 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

作为注释: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;
}
Run Code Online (Sandbox Code Playgroud)