C # Доступ к дочерним членам класса иерархии - PullRequest
0 голосов
/ 14 октября 2018

Как получить доступ к внутренним членам иерархии классов?Внизу есть корзина для покупок, cartline.Я хочу получить доступ к корзине покупок. Продукт (а компилятор этого не видит).Пытаясь заставить 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 голосов
/ 14 октября 2018

Product является свойством CartLine, а не ShoppingCart.Чтобы получить доступ к этому свойству, вашей переменной shoppingcart потребуется по крайней мере один или несколько CartLine объектов, к которым можно получить доступ через свойство indexer, и вместо этого вы будете обращаться к этому конкретному объекту:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...