如何创建一个将包含多个复杂对象类型的模型List<>

时间:2017-12-27 03:07:20

标签: c#

我将如何创建一个模型来存储多个复杂的对象类型,强类型,以及将来可以扩展到更复杂的对象类型?

???表示课程应该在哪里,但不知道该怎么做。

这里的一个重要警告是该列表应该能够混合使用,所以我认为只需将每个复杂类型的List<>>包裹起来

即。输出

  • Apple(Fruit)
  • 胡萝卜(蔬菜)
  • 葡萄(水果)
  • 洋葱(蔬菜)
  • 芒果(水果)

示例代码

// Models
public class Fruit
{
    string Name {get;set}
    bool IsSweet {get;set}
}

public class Vegetable
{
    string Name {get;set}
    bool IsGross {get;set}
}

// Controller Action
public ActionResult ViewFood(int userId)
{
    ??? foods = GetFood(userId);
    return View(foods);
}

// View
@model List<???>

<ul>
@foreach(var item in model)
{
    if(item is Fruit)
    {
        <li>@Name - @IsSweet</li>
    }
    else if(item is Vegetable)
    {
        <li>@Name - @IsGross</li>
    }
}
</ul>

// Buisness Layer 
public ??? GetFood(int userId)
{
    var fruits = repo.Get<Fruit>(f => f.UserId == userId).ToList();
    var vegatbles = repo.Get<Vegetable>(v => v.UserId == userId).ToList();

    return ???
}

1 个答案:

答案 0 :(得分:4)

您可以为FruitVegetable - Food创建公共基类:

class Food {
    public String Name { get; set; }
}

class Fruit : Food {
    public bool IsSweet { get; set; }
}

class Vegetable : Food {
    public bool IsGross { get; set; }
}

将所有???替换为Food

或者,使用dynamic