Если исключение брошено из IENUMERATORATORATOR .Movenext () или. Состоит из них, должно быть, его все равно будет расположено?
-
08-10-2019 - |
Вопрос
Интуитивно я думаю, да, но я не уверен, есть ли какая-то конвенция, о которой я не знаю.
Решение
Поскольку мы не можем знать, что такое реализация, единственный безопасный ответ - это «да».
Тем не менее, это очень редко использовать IEnumerator
напрямую - foreach
быть более распространенным. Для общего IEnumerator<T>
Вы можете использовать оператор использования:
using(var iter = obj.GetEnumerator()) {
...
}
Даже без общей версии вы можете обмануть:
IEnumerator iter = obj.GetEnumerator();
using(iter as IDisposable) {
...
}
Который будет распознаваться в итоге, если оно относится
Другие советы
Нет одноразового объекта ДОЛЖЕН быть расположенным, когда-либо.[1]
Но они должен быть. Как using
Блок использует finally
пункт для утилизации, и это выполняется, using
Блок выходит нормально или через исключение, значение по умолчанию - это распоряжаться даже перед лицом исключения.
[1] Я полагаю, что можно иметь баггискую реализацию, когда не управляемый ресурс проводится, и нет финализатора, но правильное действие существует для реализации финализатора.