public struct S : IDisposable { private bool dispose public void Dispose() { dispose = true } public bool GetDispose() { return dispose } } В примере ниже будет выведено: false false var s = new S() using (s) { Console.WriteLine(s.GetDispose()) } Console.WriteLine(s.GetDispose()) Почему второй раз вышло false, ведь метод Dispose() вызвался? Спасибо.
Ответ На эту тему есть хорошая статья от Липперта. Конкретно на Ваш вопрос ответ будет таков: код using (s) { ... } на самом деле будет выполнен как using (S s2=s) { ... } А поскольку структуры копируются по значению, а не по ссылке, все действия будут производиться над копией, а не над исходным экземпляром. И Dispose будет применён к копии.