Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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#LinkedList 我如何用C++的代码来做下面的C++代码段? std::list<MyClass*>::reverse_iterator itr(it); for(; itr != MyList.rend(); ++itr) std::list::reverse\u迭代器itr(it); 对于(;itr!=MyList.rend();++itr)_C# - Fatal编程技术网

如何以相反的顺序遍历C#LinkedList 我如何用C++的代码来做下面的C++代码段? std::list<MyClass*>::reverse_iterator itr(it); for(; itr != MyList.rend(); ++itr) std::list::reverse\u迭代器itr(it); 对于(;itr!=MyList.rend();++itr)

如何以相反的顺序遍历C#LinkedList 我如何用C++的代码来做下面的C++代码段? std::list<MyClass*>::reverse_iterator itr(it); for(; itr != MyList.rend(); ++itr) std::list::reverse\u迭代器itr(it); 对于(;itr!=MyList.rend();++itr),c#,C#,作为1-off,类似于: var el = list.Last; while (el != null) { // use el.Value el = el.Previous; } 如果您经常这样做,可以使用类似的迭代器块来生成所有值: public static IEnumerable<T> Reverse<T>(this LinkedList<T> list) { var el = list.Last; while (el

作为1-off,类似于:

var el = list.Last;
while (el != null) {
    // use el.Value
    el = el.Previous;
}
如果您经常这样做,可以使用类似的迭代器块来生成所有值:

public static IEnumerable<T> Reverse<T>(this LinkedList<T> list) {
    var el = list.Last;
    while (el != null) {
        yield return el.Value;
        el = el.Previous;
    }
}

我认为值得注意的是,
LinkedList
IEnumerable
,因此如果使用Linq,它会选择
IEnumerable.Reverse()
。这对于真正的短名单可能就足够了。对于较长的列表,此答案中的方法将更有效。@Matthewstrobbridge如果通过“使用”两种方法都可用,那么哪一种方法优先?更具体的一个?@EugenDück是的,更具体的一个(即对于
LinkedList
)将优先。但是如果免费获得的
IEnumerable
版本的性能足够,那么您根本不需要实现另一个版本。
foreach(var val in list.Reverse()) {
    // use val
}