C# 使用不同类型的对象填充列表
我正在研究一种推荐算法,一切都很好。但是现在我想在我的开发团队中实现这段代码 我将从顶部开始。我的算法可以推荐两种类型的对象,餐馆和菜肴 餐厅:C# 使用不同类型的对象填充列表,c#,wrapper,C#,Wrapper,我正在研究一种推荐算法,一切都很好。但是现在我想在我的开发团队中实现这段代码 我将从顶部开始。我的算法可以推荐两种类型的对象,餐馆和菜肴 餐厅: public class Restaurant { public Guid Id { get; set; } public string Name { get; set; } public Address Address { get; set; } public List<Tag> Tags { get; s
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 RecommenderItem
{
public Restaurant rest { get; set; }
public Dish dish { get; set; }
}
这样我就可以创建一个列表
,并将其返回给客户端。客户机只需要检查哪个属性为null,并从哪个属性为null的属性中检索值
我只是不确定这是否是正确的方法。在这方面有什么“最佳实践”吗?让我知道我是否应该详细说明 如果它们没有公共基类,那么创建一个包装类是最好的解决方案。同时,你可以更灵活地创建类似
public class RecommendationItem
{
public Guid Id { get; set; }
public string Name { get; set; }
public string PageUrl { get; set; }
public object Entity { get; set; }
}
所以,您可以在这个类中包含所有公共信息,而不需要客户机检查他使用的对象类型。在这种情况下,添加一个以上的项目类型会更容易。在同一类型中,我添加了对实体本身的引用-如果需要对一个或两个项目类型进行某些特定处理,则可以使用它。如果要连接成对的元素,我始终认为。。。好吧,把元素配对。我假设每道菜都是特定于某家餐厅的?那么名单应该是[餐厅1][disk for Restaurant1][Restaurant2][disk for Restaurant2] 我喜欢前面的答案,oryol也创建了一个公共基类
所以,你的推荐课很好。但是,填写这两个属性并将一个对列表传递回。通过创建一个新的列表,遍历推荐项列表,并从列表中的每个条目添加餐厅和菜肴,将列表扩展到完整的显示项目集。您可以声明一个接口IRecommenderItem:
public interface IRecommenderItem
{
//shared properties
}
public class Restaurant : IRecommenderItem
{
}
public class Dish : IRecommenderItem
{
}
然后,您可以键入:
List<IRecommenderItem> m = new List<IRecommenderItem>();
List m=新列表();
就我个人而言,我会让这两个类实现一个接口,该接口公开共享属性,例如Id
和Name
(以及标记
),并创建该接口的列表(该接口还可以公开一个“类型
”,用于替代)RecommenderItem
对我来说似乎是一个正确的解决方案,因为它似乎是一个菜品列表,每个菜品都与餐厅相关。您的返回类型应该反映这一点,这取决于您如何生成显示信息。e、 g.ToString()可以返回所有相关信息,或者接口可以公开类似“ListProperties”@Bas-Ah的内容,好的。很抱歉尽管如此,将一个属性或另一个属性设置为null也很好。通常比任何东西都可能在其中的列表要好——除非UI允许您使用某种数据模板机制,在这种机制中它将动态选择正确的模板来显示项目。然后使用列表
,或列表
。我想把你的例子改成[餐厅][菜肴][餐厅][餐厅][菜肴]
或者其他一些明确的例子。(除了我之外,没人没听懂你的意思,所以也许你很好!)@EdPlunkett好吧,这正是我的产品负责人想要的。我将添加一个描述来更好地解释它。啊,所以我必须检查哪个类型<代码>实体代码>并相应地使用它?尽管它们不是成对的。菜式和餐厅是完全分开的。我的算法纯粹根据用户提供的信息生成这些建议。我的产品所有者只想在用户的主页上替换类型。啊!这就是我事后的猜测!
public interface IRecommenderItem
{
//shared properties
}
public class Restaurant : IRecommenderItem
{
}
public class Dish : IRecommenderItem
{
}
List<IRecommenderItem> m = new List<IRecommenderItem>();