C# 将一个列表转换为另一个列表的方法(通过多态性、子类和父类)
好的,我有以下方法:C# 将一个列表转换为另一个列表的方法(通过多态性、子类和父类),c#,asp.net-mvc,inheritance,collections,polymorphism,C#,Asp.net Mvc,Inheritance,Collections,Polymorphism,好的,我有以下方法: private List<Store> NextPrevious(List<Store> model, int numFields, int page, ref bool nextRef, ref bool previousRef) { if (model.Count > numFields && page == 0) { model = model.Skip(page * (numFields
private List<Store> NextPrevious(List<Store> model, int numFields, int page, ref bool nextRef, ref bool previousRef)
{
if (model.Count > numFields && page == 0)
{
model = model.Skip(page * (numFields - 1)).Take(numFields - 1).ToList();
next = true;
previous = false;
}
else if (page > 0 && model.Skip(page + (numFields - 2)).Count() <= (numFields - 1))
{
model = model.Skip(page + (numFields - 2)).Take(numFields - 1).ToList();
next = false;
previous = true;
}
else if (page > 0 && model.Count > (page + 1))
{
model = model.Skip(page + (numFields - 2)).Take(numFields - 2).ToList();
next = true;
previous = true;
}
return model.ToList();
}
我知道这个错误意味着什么,但我只是不知道如何处理它,所以我在这里寻求帮助。顺便说一句,我也不能将其转换为return model.ToList()
,因为创建该方法是为了将其用于继承Store
类的其他类对象
谢谢 一种方法是使用
Cast()
,类似于:
model.Groups = NextPrevious(...).Cast<Group>().ToList();
解决方案可以是将
NextPrevious
更改为,并在类型参数上声明以下内容:
private List<T> NextPrevious<T>(List<T> model, int numFields, int page, ref bool nextRef, ref bool previousRef) where T:Store
{
//...
}
private List NextPrevious(List model,int numFields,int page,ref bool nextRef,ref bool previousRef)其中T:Store
{
//...
}
这样,您只需执行以下操作:
model.Groups = NextPrevious(model.Groups, 3, groupPage, ref next, ref previous);//call model.Groups.ToList() in case the Groups property is not a List<Group>
model.Groups=NextPrevious(model.Groups,3,groupPage,ref next,ref previous)//如果Groups属性不是列表,则调用model.Groups.ToList()
您可以在调用
NextPrevious
方法时忽略type参数,因为编译器将根据您传递的第一个方法参数来推断它。若要继续工作,谢谢!让我再运行几个测试,我会在一分钟内让您知道的!:)如果可以的话,你会得到确认的标签。我会等待它-我的意思是如果它对你很好-但很可能有人会提出一个不同的,也许更好的解决方案。它可能会起作用,所以我会保持原样。如果到早上我还没有找到更好的解决办法,我就给你贴标签。再次感谢你!:)很好,这一个效果更好!(性能方面),我很新鲜,来自java,但是我确实知道C++中的模板,但是他们并没有真正地在我的脑海里闪过。谢谢,这个解决方案正是我想要的!:)@NemanjaT它们在C#中不被称为“模板”,它们被称为泛型。在这种情况下,该方法是泛型的(与普通参数一起使用类型参数T
(在尖括号中
)。它也可以是泛型的类(或接口、结构或委托类型),例如类型类列表{…}
。最后一个.ToList()
是不必要的。为什么不像往常一样使用out
而不是ref
。我建议的这两个更改都要求在最后有一个“包罗万象”的else
,如果,则遵循所有这些else。
....
return model.Cast<Group>.ToList();
private List<T> NextPrevious<T>(List<T> model, int numFields, int page, ref bool nextRef, ref bool previousRef) where T:Store
{
//...
}
model.Groups = NextPrevious(model.Groups, 3, groupPage, ref next, ref previous);//call model.Groups.ToList() in case the Groups property is not a List<Group>