Вопрос

Я использую расширение MenteDod Reverse (), но, похоже, ничего не делает.Состояние MSDN это реализуется как отсроченное исполнение, однако я не могу, казаться, чтобы начать это на работу.

Вот как я это называю.

        Queue<T> currentPath = new Queue<T>();
        currentPath.Enqueue(someValue);
        currentPath.Enqueue(someValue2);

        currentPath.Reverse();
.

Это то, что говорит MSDN:

Этот метод реализован с помощью отложенного выполнения.Немедленное возвращаемое значение является объектом, который хранит всю информацию, которая требуется для выполнения действия.Запрос, представленный этим способом, не выполняется до тех пор, пока объект не будет перечислен либо путем вызова метода Getenumerator непосредственно или с помощью Foreach в Visual C # или для каждого в Visual Basic.

Я не уверен, что это значит, вызывая GetEnumerator.Я пробовал это, просто сделав следующее безрезультатно:

currentPath.Reverse();
currentPath.GetEnumerator();
.

Я чувствую, что я делаю что-то довольно глупо здесь, любая помощь будет оценена!

Это было полезно?

Решение

Реверс возвращает обратную последовательность.Это не изменяет оригинал.Попробуйте что-то вроде этого, чтобы построить новую очередь из обратных элементов:

currentPath = new Queue<T>(currentPath.Reverse());
.


Когда документация говорит о вызове getnumerator, это означает, что на iEnumerable, который был возвращен обратным ():

IEnumerable reversed = currentPath.Reverse();
IEnumerator reversedEnumerator = reversed.GetEnumerator();
// Now reversedEnumerator has assembled the reversed sequence,
// we could change the contents of currentPath and it wouldn't
// affect the order of items in reversedEnumerator.
.

Конечно, редко любая необходимость получить повторный перечислетель, потому что foreach сделает это для нас под крышками:

IEnumerable reversed = currentPath.Reverse();
foreach (var item in reversed)
{
    // ...
}
.

или действительно, как в моем первом примере, мы можем передать обратную перечислительную к конструктору сбора, такого как Queue или List, и позволит ему выполнить итерацию:

currentPath = new Queue<T>(currentPath.Reverse());
.

Другие советы

Reverse() - это оператор LINQ.Он используется для работы на последовательности, в которой вы взаимодействуете.Таким образом, вы могли бы сделать Seomthing This:

foreach (var value in currentPath.Reverse())
{
     // Do something
}
.

Это произойдет по поводу предметов в очереди в обратном порядке.Фактическая очередь остается без изменений.

Вы можете создать новую очередь как обратное существующую очередь, подобную этому:

var newQueue = new Queue<T>(currentPath.Reverse());
.

Вы пробовали итерацию по очереди после вызова метода Reverse()?

Вот что говорит MSDN в коде:

foreach (T item in currentPath.Reverse())
{
   // Do something with current item in queue.
}
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top