Если исключение брошено из IENUMERATORATORATOR .Movenext () или. Состоит из них, должно быть, его все равно будет расположено?

StackOverflow https://stackoverflow.com/questions/4416100

Вопрос

Интуитивно я думаю, да, но я не уверен, есть ли какая-то конвенция, о которой я не знаю.

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

Решение

Поскольку мы не можем знать, что такое реализация, единственный безопасный ответ - это «да».

Тем не менее, это очень редко использовать IEnumerator напрямую - foreach быть более распространенным. Для общего IEnumerator<T> Вы можете использовать оператор использования:

using(var iter = obj.GetEnumerator()) {
    ...
}

Даже без общей версии вы можете обмануть:

IEnumerator iter = obj.GetEnumerator();
using(iter as IDisposable) {
    ...
}

Который будет распознаваться в итоге, если оно относится

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

Нет одноразового объекта ДОЛЖЕН быть расположенным, когда-либо.[1]

Но они должен быть. Как using Блок использует finally пункт для утилизации, и это выполняется, using Блок выходит нормально или через исключение, значение по умолчанию - это распоряжаться даже перед лицом исключения.


[1] Я полагаю, что можно иметь баггискую реализацию, когда не управляемый ресурс проводится, и нет финализатора, но правильное действие существует для реализации финализатора.

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