我有一个列表<&gt ;,填充了我班级的对象。那个工作正常。 现在我想将最后10个元素加载到新列表<&gt ;,这是颠倒排序的。所以最后一个元素将是新List<>的第一个元素。第10个将是新列表中的最后一个<>。
通常这不应该是一项艰巨的任务,但我不知道......它以正确的方式进行迭代,并且在我看来应该有效。
Both Lists<> are Lists<lastChanges>. lastChange is my class.
这是我现在得到的:
// x represents the amount of elements for the new List<>
int x = 10;
// elems is the old list. if it contains less than 10 elements,
// x should be the amount instead of 10
if (elems.Count < 10)
{
x = elems.Count;
}
// The start-index is made by elems.Count -> 10 Items -> the 10th item
// would get the index '9'
// as long as i is greater than the amount of the large List<>
// minus the wanted amount for the new List<>
// the loop is going to repeat
for (int i = elems.Count-1; i > elems.Count - x; i--)
{
// lastChanges is my class which both Lists are filled with
lastChanges lastArt = elems[i];
if (lastArt != null)
{
items.Add(lastArt);
}
}
我错过了什么?我真的不认为我还是一个初学者(当然要改进很多),但我在这里找不到错误...
例如:
elems-List确实包含2个元素, 然后x等于2。 for循环将开始:
for(int i=1;i>0;i--)
所以循环会运行两次。
在第一轮比赛中,将会出现#lastce&#39;设置等于&#39; elems&#39;的第二个对象而不是被添加到&#39;项目,
在第二次运行中,第一项将添加到&#39;项目&#39;。
因此,这两个项目都会添加到&#39;项目中,一切都很好。
但为什么我一直都会收到错误? 两个对象都是definetely!= null ...
谢谢!
编辑:
我总是得到一个&#39; NullReferenceException&#39;在这一行:
items.Add(lastArt);
两个对象都是definetely!= null,所以在我看来,它必须是我迭代中的错误。
答案 0 :(得分:4)
尝试使用LINQ
var result = data.Skip(data.Count - 10).Take(10);
List<SomeType> list = new List<SomeType>(result.Reverse());
答案 1 :(得分:1)
让循环计数更容易。
不是试图跟踪从最后一个元素开始计数的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]);
使用LINQ更加容易。
List<MyClass> lastElements = elems.Reverse().Take(10).ToList();