我有一个正在一个是被呼叫4倍方法中使用的通用的清单。此方法使用此通用列表的值在PDF中编写表。如何扭转不改变同一列表中的泛型列表?
我的问题是,我需要扭转的方法这里面通用的清单,但我打电话的方法4次这样的名单被逆转我每次调用该方法,我不希望到时候...我能做什么?有没有办法在不改变原始的情况下反转列表?
这是里面的方法:
t.List.Reverse();
foreach (string t1 in t.List)
{
//Some code
}
我有一个正在一个是被呼叫4倍方法中使用的通用的清单。此方法使用此通用列表的值在PDF中编写表。如何扭转不改变同一列表中的泛型列表?
我的问题是,我需要扭转的方法这里面通用的清单,但我打电话的方法4次这样的名单被逆转我每次调用该方法,我不希望到时候...我能做什么?有没有办法在不改变原始的情况下反转列表?
这是里面的方法:
t.List.Reverse();
foreach (string t1 in t.List)
{
//Some code
}
“易”的办法是只遍历以相反的顺序列表而不实际改变列表本身,而不是试图扭转它首次知道该怎么办没有其他时间:
foreach (string t1 in t.List.AsEnumerable().Reverse())
{
//Some code
}
通过使用LINQ Reverse
方法,而不是List
反转,我们可以向后遍历它没有变异的名单。所述AsEnumerable
需要在那里,以防止List
Reverse
方法被使用。
这就是我一直在寻找的!谢谢Linq !!! ...和Servy当然:) –
你询问如何创建列表的反转副本,但没有突变原。
LINQ可以这样做:
foreach (var t1 in Enumerable.Reverse(t.List))
你可以做两件事情之一。无论是采取了倒车从方法列表,并调用该方法四次,前一次反向列表,或做:
List<My_Type> new_list = new List<Int32>(t.List);
new_list.Reverse();
,是以列表的副本扭转之前,所以你不要触摸原始列表。
,因为现在你正在呼吁反四倍,而不是只一次,我会建议第一种方法。
直到现在,所有给出的选项都以相反顺序将所有元素内部复制到另一个列表,显式为new_list.Reverse()
或隐含t.List.AsEnumerable().Reverse()
。作为下面的扩展方法,我更喜欢没有这个成本的东西。
public class ListExtetions {
public static IEnumerable<T> GetReverseEnumerator(this List<T> list) {
for (int i = list.Count - 1; i >= 0; i--)
return yeild list[i];
}
}
而且可以作为
foreach (var a in list.GetReverseEnumerator()) {
}
正在被传递的列表,这是该类型的实例字段,它是从一种方法,还是其他什么东西通话产生的? – Servy