C#访问层次结构类的子成员

时间:2018-10-13 23:23:48

标签: c# asp.net-core

如何访问类层次结构的内部成员?下面有购物车,卡特琳。我想访问shoppingcart.Product(并且编译器没有看到此内容)。为了使foreach也能正常工作,我只需要一种最佳方法,如果其他更好的选择(包括类型属性),请告诉我。

public class ShoppingCart : List<CartLine>
{
    public ShoppingCart()
    {

    }
}

public class CartLine
{
    public int CartLineId { get; set; }
    public Product Product { get; set; }
    public int Quantity { get; set; }
}

ShoppingCart shoppingcart = new ShoppingCart();

这不会显示在Intellisense中

shoppingcart.Product

此外,我想让foreach工作

@model ShoppingCart

<tbody>
    @foreach (var item in Model)
    {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.CartLineId)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Product.ProductId)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Product.ProductName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Quantity)

1 个答案:

答案 0 :(得分:1)

ProductCartLine而不是ShoppingCart的属性。为了访问该属性,您的shoppingcart变量将需要至少一个或多个CartLine对象,这些对象可以通过indexer属性进行访问,而您将访问该特定对象:< / p>

var shoppingCart = new ShoppingCart();
shoppingCart[0] = new CartLine { CartLineId = 100, Product = GetTestProduct(), Quantity = 1 };

Console.WriteLine(shoppingCart[0].Product.ToString());

或者,由于ShoppingCart是作为模型类型使用的,因此最好不要基于List<T>使用它。相反,请尝试如下操作:

class ShoppingCart
{
    public IList<CartLine> Items { get; } = new List<CartLine>();

    public ShoppingCart() {}
}

在这种情况下,您将像这样访问第一件商品:

shoppingCart.Items[0].Product