C # Объявление определения типа Невозможно создать экземпляр абстрактного класса или интерфейса - PullRequest
0 голосов
/ 14 октября 2018

Я создал класс Cartline.Затем я создал коллекцию под названием ShoppingCart.Когда я пытаюсь объявить ShoppingCart, я получаю сообщение об ошибке.Кто-нибудь знает, как это исправить?

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


using ShoppingCart = System.Collections.Generic.IEnumerable<ElectronicsStore.Models.CartLine>;

ShoppingCart shoppingcart = new ShoppingCart();

Cannot create an instance of the abstract class or interface 'IEnumerable<CartLine>'    ElectronicsStore

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Ошибка не требует пояснений.Два варианта - вы можете создать псевдоним, используя конкретный тип (например, List<CartLine>), но вместо этого я бы порекомендовал вам определить класс, который наследуется от List<CartLine> (или любой другой коллекции, которая лучше всего соответствует вашим потребностям):

public class ShoppingCart : List<CartLine>
{
    // implement constructors you want available
    public ShoppingCart(){}

    public ShoppingCart( IEnumerable<CartLine> collection ) : base( collection ) {}

    public ShoppingCart( int capacity ) : base( capacity ) {}

    // the benefit here is you can add useful properties
    // if CartLine had a price you could add a Total property, for example:
    public decimal Total => this.Sum( cl => cl.Quantity * cl.Price );
}

Тогда вы можете использовать в соответствии с запросом:

var cart = new ShoppingCart();
cart.Add( new CartLine() { ... } );
var cartTotal = cart.Total;
... etc ...

Инициализатор коллекции также будет работать:

var cart = new ShoppingCart() { new CartLine() { ... }, ... }

Или инициализировать с существующим IEnumerable<CartLine>, например IQueryable<CartLine>, используяEntity Framework:

var cart = new ShoppingCart( dbContext.CartLines.Where( ... ) );
0 голосов
/ 14 октября 2018

Самое простое решение - создать новый класс ShoppingCart, у которого есть свойство, представляющее собой список сущностей CartLine:

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

public class ShoppingCart
{
    public IList<CartLine> CartLines {get;set;}
}


ShoppingCart shoppingcart = new ShoppingCart();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...