CodeGo.net>用不同类型的对象填充列表

我正在研究一种可以正常工作的推荐算法.但是现在我想将此代码实现到我的开发团队的分支中.

我将从头开始.我的算法可以推荐2种类型的对象,餐厅和菜肴.

餐厅:

public class Restaurant
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public Address Address { get; set; }
    public List<Tag> Tags { get; set; } = new List<Tag>();
    public int PriceRange { get; set; }
}

和菜:

public class Dish
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public double Price { get; set; }
    public virtual Restaurant rest { get; set; }
    [ForeignKey("rest")]
    public Guid RestaurantId { get; set; }
    public List<Tag> Tags { get; set; }
}

现在,我的产品所有者希望该列表在我们应用的首页上显示时像这样:

[Restaurant][Dish][Restaurant][Dish] Etc...

因此,基本上,他想改变推荐对象的类型.这些菜肴和餐厅是完全分开的.它们是由我的算法完全根据用户的偏好生成的,彼此之间完全没有关联.

现在我的问题是如何返回这样的列表.我想我需要一个包装类,其中包含如下所示的Restaurant或Dish:

public class RecommenderItem
{
    public Restaurant rest { get; set; }
    public Dish dish { get; set; }
}

这样,我可以创建List< RecommenderItem>并返回给客户.客户端只需要检查哪个属性为null并从不为空的属性中检索值即可.

我只是不确定这是否是正确的方法.是否有“最佳做法”?让我知道是否需要详细说明!

最佳答案
如果他们没有通用的基类,那么创建一个包装器类是最佳解决方案.同时,您可以更加灵活地创建类似

public class RecommendationItem
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string PageUrl { get; set; }
    public object Entity { get; set; }
}

因此,您可以在此类中包括所有常见信息,并且不需要客户端检查他使用的对象类型.在这种情况下,添加一种以上的项目类型会更加容易.在同一类型中,我添加了对实体本身的引用-如果需要对一种或两种项目类型进行某些特定处理,则可以使用它.

转载注明原文:CodeGo.net>用不同类型的对象填充列表 - 代码日志