Здравствуйте, scale_tone, Вы писали:
_>Стоп! Оно же скомпилировалось!! Voila!!!
_>_> using
_> (
_> Dummy ?
_> Dummy = o is Dummy
_> ? null :
_> d
_> ){}
_>
Точно!
Здравствуйте, nikov, Вы писали:
N>Точно!
М-да. Решарпер при подобных экспериментах, конечно, стоит отключать...
И еще интересно, зачем компилятор позволяет делать такое:
struct S : IDisposable
{
public void Dispose(){}
}
static void Main()
{
using(S? s = null){}
}
Здравствуйте, scale_tone, Вы писали:
_>И еще интересно, зачем компилятор позволяет делать такое:
_>_> using(S? s = null){}
_>
Видимо, потому что вместо null может быть более сложный инициализатор (вызов метода, например), который может вернуть как null, так и значение, которое в конце нужно будет освободить с помощью Dispose. Точно так же, как и с ссылочными типами.
Здравствуйте, nikov, Вы писали:
N>Видимо, потому что вместо null может быть более сложный инициализатор (вызов метода, например), который может вернуть как null, так и значение, которое в конце нужно будет освободить с помощью Dispose. Точно так же, как и с ссылочными типами.
И правда. Оказывается, можно написать как-то так:
void DoWithUnitOfWork(Action task1, Action task2, IDisposable unitOfWorkImpl = null)
{
using (unitOfWorkImpl)
{
task1(); task2();
}
}
и оно не упадет.