C# 如何使用项目列表(从抽象类继承)作为其抽象类?
下面是我遇到的问题的一个简短示例 我有两个抽象类EntityAbs和ListentyAbs:C# 如何使用项目列表(从抽象类继承)作为其抽象类?,c#,generics,abstract-class,abstraction,C#,Generics,Abstract Class,Abstraction,下面是我遇到的问题的一个简短示例 我有两个抽象类EntityAbs和ListentyAbs: 公共抽象类EntityAbs{ //将自身保存到数据库中 公共抽象int SaveEntity(); } 公共抽象类ListEntityAbs,其中T:EntityAbs{ 受保护列表; //将每个值保存到数据库中 公共虚拟存储实体() { 返回InnerList.Sum(entity=>entity.SaveEntity()); } } 在EntityAbs上创建多个类并获取其自己的ListEnti
公共抽象类EntityAbs{
//将自身保存到数据库中
公共抽象int SaveEntity();
}
公共抽象类ListEntityAbs,其中T:EntityAbs{
受保护列表;
//将每个值保存到数据库中
公共虚拟存储实体()
{
返回InnerList.Sum(entity=>entity.SaveEntity());
}
}
在EntityAbs上创建多个类并获取其自己的ListEntity(一个名为Item的类的示例):
公共类项:EntityAbs{
公共覆盖int SaveEntity()
{
//在这里实现如何保存它
}
}
公共类项目:ListentiesAbs,IList{
//里面有具体的课堂内容
}
现在,我想将每个ListentiesAbs保存到数据库中的其他位置
public int Save(参数listentiesabs[]列表)
{
for(int i=0;i
但是,项目(或我在这里添加的任何其他列表)显示了VisualStudio的错误,我不知道为什么。
错误表示它无法从Items转换为listentiesabs
,但Items从listentiesabs转换为Items,从EntityAbs转换为Items
我错过什么了吗?我试过用ListentyAbs或Cast来铸造,但都不合适
非常感谢您的帮助,因为我甚至不确定这种行为是否真的可行。这意味着
listentiesabs
不是,也不能简单地转换为listentiesabs
选项1:使保存通用
public int Save<T>(params ListEntitiesAbs<T>[] lists) where T:EntityAbs
{
for(int i = 0; i < lists.Length; i++)
lists[i].SaveEntities();
}
选项1正是我所需要的,我感到惭愧,没有考虑它。它解决了我的兼容性问题,但是如果我在调用Save()
方法时添加多个列表,params
似乎不起作用,您还有其他线索吗?@arrcivalparams
应该可以与泛型方法配合使用。猜测类型不匹配,即您试图调用Save(new-listentiesabs(),new-listentiesabs())
由于上述原因,这将不起作用。如果这是一个问题,请使用选项2。根据我的示例,这是一个.NET提琴。我想这些解决方案都不管用,我不得不选择第二种方案
public interface IListEntitiesAbs {
public int SaveEntities();
}
public int Save(params IListEntitiesAbs[] lists){
...
}