首页 > 解决方案 > C#如何检查接口对象列表是否包含某个对象?

问题描述

我的界面 Packageable 看起来像这样:

public interface Packageable
{
    double GetPrice(double modifier);
}

然后我有 4 个类,都继承自 Packageable,唯一的区别是价格。这些是游泳池、健身房、跳舞和台球,它们看起来像这样:

class Billiards : Packageable
{
    public double GetPrice(double modifier)
    {
        double price = 38;
        switch (modifier)
        {
            case 2:
                modifier = 0.7;
                break;
            case 3:
                modifier = 0.5;
                break;
            case 4:
                modifier = 0.35;
                break;
        }
        return price * modifier;
    }
}

最后,我有一个主类(其中的相关元素)如下所示:

public class People
{
    public List<Packageable> Packages = new List<Packageable>();
    public List<Packageable> ReturnPackages()
    {
        return Packages;
    }
}

在我的主表单中,我想检查列表 Packages 是否包含其中一个对象。这是我尝试的:

if (people[lbMain.SelectedIndex].ReturnPackages().Contains(SwimmingPool)) {}

但是,由于 SwimmingPool 是一种类型而不是对象,因此 Visual Studio 会引发错误。我试图通过创建每个类的对象来解决这个问题,但这也不起作用:

SwimmingPool swimmingpool = new SwimmingPool();
if (people[lbMain.SelectedIndex].ReturnPackages().Contains(swimmingpool)) {}

此代码运行,但从不返回 true。我该如何正确地做到这一点?

标签: c#listobject

解决方案


您可以使用Any检查类型的 lambda 表达式:

if (people[lbMain.SelectedIndex].ReturnPackages()
                                .Any(p => p.GetType() == typeof(SwimmingPool))) 
{
    // do something...
}

推荐阅读