Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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 Mvc_Inheritance_Collections_Polymorphism - Fatal编程技术网

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>