Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#声明类型定义无法创建抽象类或接口的实例_C#_Asp.net Core - Fatal编程技术网

C#声明类型定义无法创建抽象类或接口的实例

C#声明类型定义无法创建抽象类或接口的实例,c#,asp.net-core,C#,Asp.net Core,我创建了一个类Cartline。然后我创建了一个名为ShoppingCart的集合。 当我试图声明ShoppingCart时,我收到错误消息。有人知道如何解决这个问题吗 public class CartLine { public int CartLineId { get; set; } public Product Product { get; set; } public int Quantity { get; set; } } using ShoppingCart

我创建了一个类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
公共类CartLine
{
公共int CartLineId{get;set;}
公共产品产品{get;set;}
公共整数数量{get;set;}
}
使用ShoppingCart=System.Collections.Generic.IEnumerable;
ShoppingCart ShoppingCart=新ShoppingCart();
无法创建抽象类或接口“IEnumerable”ElectronicsStore的实例

最简单的解决方案是创建一个名为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();
公共类CartLine
{
公共int CartLineId{get;set;}
公共产品产品{get;set;}
公共整数数量{get;set;}
}
公共类购物车
{
公共IList CartLines{get;set;}
}
ShoppingCart ShoppingCart=新ShoppingCart();

最简单的解决方案是创建一个名为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();
公共类CartLine
{
公共int CartLineId{get;set;}
公共产品产品{get;set;}
公共整数数量{get;set;}
}
公共类购物车
{
公共IList CartLines{get;set;}
}
ShoppingCart ShoppingCart=新ShoppingCart();

错误是不言自明的。两个选项—您可以使用具体类型(例如,
列表
)创建别名,但我建议您定义一个继承自
列表
(或最适合您需要的任何集合)的类:

集合初始值设定项也将起作用:

var cart = new ShoppingCart() { new CartLine() { ... }, ... }
或者使用现有的
IEnumerable
初始化,例如使用实体框架的
IQueryable

var cart = new ShoppingCart( dbContext.CartLines.Where( ... ) );

这个错误是不言自明的。两个选项—您可以使用具体类型(例如,
列表
)创建别名,但我建议您定义一个继承自
列表
(或最适合您需要的任何集合)的类:

集合初始值设定项也将起作用:

var cart = new ShoppingCart() { new CartLine() { ... }, ... }
或者使用现有的
IEnumerable
初始化,例如使用实体框架的
IQueryable

var cart = new ShoppingCart( dbContext.CartLines.Where( ... ) );


ShoppingCart设置为IEnumerable,这是一个接口-不能实例化接口。。将其更改为ListThank,为什么不ShoppingCart ShoppingCart=new IEnumerable(),而不是列表?@StevenMayer解释了原因
IEnumerable
是一个接口。你不能创建接口的实例,只能创建具体的类。我真正想做的是创建一个同义词(Cartlines)=ShoppingCart,我如何声明ShoppingCart,除了一次以外,我从来没有引用过Cartlines?我想在整个程序中多次声明购物车,还想能够从购物车访问cartline成员,包括产品、数量,并像这样运行foreach@foreach(shoppingcart.cartline中的var line){@Html.DisplayFor(modelItem=>line.product)}shoppingcart设置为IEnumerable,哪一个是接口-不能实例化接口。。将其更改为ListThank,为什么不ShoppingCart ShoppingCart=new IEnumerable(),而不是列表?@StevenMayer解释了原因
IEnumerable
是一个接口。你不能创建接口的实例,只能创建具体的类。我真正想做的是创建一个同义词(Cartlines)=ShoppingCart,我如何声明ShoppingCart,除了一次以外,我从来没有引用过Cartlines?我想在整个程序中多次声明购物车,也希望能够从购物车访问cartline成员,包括产品、数量,并像这样运行foreach@foreach(shoppingcart.cartline中的var line){@Html.DisplayFor(modelItem=>line.product)}如果使用此解决方案,请理解,您需要将IList(一个接口)实例化为一个具体的类,如List。这看起来像IList cartLines=new List();然后你就可以使用CartLines.Add(cartline),当我这样做的时候,我必须进行双foreach,看这里,我试图避免double-foreach@StevenMayer,也许最好在ShoppingCart中实例化它constructor@AminMozhgani同意,如果你打算通过购物车添加产品(听起来不错)。TVLamp,在我看来,该视图的模型应该是购物车,而不是IEnumerable。那你就只需要穿过马车就行了。如果一个用户可能有多个购物车,则无法帮助double foreach。@TVLamp为什么在视图中有购物车列表?它的意义是什么?如果您使用此解决方案,请理解您需要将IList(一个接口)实例化为一个具体的类,如List。这看起来像IList cartLines=new List();然后你就可以使用CartLines.Add(cartline),当我这样做的时候,我必须进行双foreach,看这里,我试图避免double-foreach@StevenMayer,也许最好在ShoppingCart中实例化它constructor@AminMozhgani同意,如果你打算通过购物车添加产品(听起来不错)。TVLamp,在我看来,该视图的模型应该是购物车,而不是IEnumerable。那你就只需要穿过马车就行了。如果一个用户可能有多个购物车,则无法帮助double foreach。@TVLamp为什么在视图中有购物车列表?这是什么意思?我注意到这个解决方案只需要@foreach(模型中的var项),我必须阅读基本(集合)是的,
ShoppingCart
在这个实现中是一个
IEnumerable
。采用
可枚举
参数的构造函数允许使用现有的
IEnumerable
初始化集合,因此如果您正在加载
CartLine
实体w/EF,例如