C# 放入列表的最后10个元素<&燃气轮机;进入其他列表<&燃气轮机;
我有一个列表,里面装满了我的类的对象。那台很好用。 现在我想将最后10个元素加载到一个新列表中,该列表是颠倒排序的。因此,最后一个元素将是新列表中的第一个元素,第十个元素将是新列表中的最后一个元素 通常这不应该是一项艰巨的任务,但我不知道。。。它以正确的方式迭代,在我看来应该有效C# 放入列表的最后10个元素<&燃气轮机;进入其他列表<&燃气轮机;,c#,list,sorting,collections,C#,List,Sorting,Collections,我有一个列表,里面装满了我的类的对象。那台很好用。 现在我想将最后10个元素加载到一个新列表中,该列表是颠倒排序的。因此,最后一个元素将是新列表中的第一个元素,第十个元素将是新列表中的最后一个元素 通常这不应该是一项艰巨的任务,但我不知道。。。它以正确的方式迭代,在我看来应该有效 Both Lists<> are Lists<lastChanges>. lastChange is my class. 因此循环将运行两次 在第一次运行中,将“lastArt”设置为等于“e
Both Lists<> are Lists<lastChanges>. lastChange is my class.
因此循环将运行两次
在第一次运行中,将“lastArt”设置为等于“elems”的第二个对象,然后添加到“items”
在第二次运行中,第一项将添加到“items”
所以,这两个项目都被添加到“项目”中,一切都很好
但是为什么我总是出错呢?
两个对象都是明确的!=空
谢谢大家!
编辑:
我总是在这一行中得到一个“NullReferenceException”:
items.Add(lastArt);
两个对象都是明确的!=null,所以在我看来这一定是迭代中的一个错误。尝试使用LINQ
var result = data.Skip(data.Count - 10).Take(10);
List<SomeType> list = new List<SomeType>(result.Reverse());
var result=data.Skip(data.Count-10)、Take(10);
列表=新列表(result.Reverse());
尝试使用LINQ
var result = data.Skip(data.Count - 10).Take(10);
List<SomeType> list = new List<SomeType>(result.Reverse());
var result=data.Skip(data.Count-10)、Take(10);
列表=新列表(result.Reverse());
使循环计数更容易。
List<MyClass> lastElements = elems.Reverse().Take(10).ToList();
不要试图跟踪从最后一个元素开始的i
倒计时,而是从1开始,然后向上计数
int numElements = 10; // or however you want from the end
for (int i = 1; i <= numElements && i <= elems.Count; i++)
lastItems.Add(elems[elems.Count - i]);
int numElements=10;//或者你想从最后得到什么
对于(int i=1;i,循环计数更容易。
List<MyClass> lastElements = elems.Reverse().Take(10).ToList();
不要试图跟踪从最后一个元素开始的i
倒计时,而是从1开始,然后向上计数
int numElements = 10; // or however you want from the end
for (int i = 1; i <= numElements && i <= elems.Count; i++)
lastItems.Add(elems[elems.Count - i]);
int numElements=10;//或者从结尾开始按您想要的方式
对于(int i=1;i列表
应该是什么?列表
?您会遇到什么错误?请创建一个小示例来重现该问题。您可以使用LinqnewList=oldList.Reverse()。获取(10).ToList();
并在中添加(x=>x!=null)
(如果需要)。“我总是在这一行中得到一个'NullReferenceException':items.Add(lastArt);
”-然后items
是null
。您需要将其初始化为new List
。在您的示例中,列表包含2个元素,我认为这不会运行两次。根据您的代码,I=(2-1)so 1,并检查这是否大于(2-2)或者0,它是。第一个循环将运行。但是,它将i减少1,因此现在是0。然后,逻辑将检查0>0,它不是,所以不会运行。一个列表
假设是什么?列表
?您会得到什么错误?请创建一个小示例来重现该问题。您可以使用LinqnewList来完成此操作=oldList.Reverse().Take(10).ToList();
并在需要时添加一个Where(x=>x!=null)
。“我总是在这一行中得到一个'NullReferenceException':items.add(lastArt);
“-thenitems
为null
。您需要将其初始化为new List
。在您的示例中,列表包含2个元素,我认为这不会运行两次。根据您的代码,I=(2-1)so 1,并检查是否大于(2-2)或者0,它是。第一个循环将运行。但是,它将i减少1,因此现在是0。然后,逻辑将检查0是否大于0,它不是,所以不会运行。或者甚至data.Skip(data.Count-10)。Take(10).ToList();
但是OP首先要最后一个元素。您需要反转结果。在这种情况下,甚至data.Skip(data.Count-10).ToList();
会起作用。^ ^^^--反转它可以是data.Skip(data.Count-10).Reverse().ToList();
这不是问题的所在。甚至data.Skip(data.Count-10).接受(10).ToList();
,但OP需要先反转最后一个元素。在这种情况下,甚至是data.Skip(data.Count-10).ToList();
会起作用。^ ^--反转它可以是data.Skip(data.Count-10).Reverse().ToList()这不是问题所在。Linq示例将修复空引用异常,因为它创建了一个新列表。Linq示例将修复空引用异常,因为它创建了一个新列表。