Re[3]: [Этюд, C#] Ненужный null
От: nikov США http://www.linkedin.com/in/nikov
Дата: 26.12.13 20:35
Оценка:
Здравствуйте, scale_tone, Вы писали:

_>Стоп! Оно же скомпилировалось!! Voila!!!


_>
_>        using
_>        (
_>            Dummy ? 
_>                Dummy = o is Dummy
_>                    ? null :
_>                d
_>        ){}
_>



Точно!
Re[4]: [Этюд, C#] Ненужный null
От: scale_tone Норвегия https://scale-tone.github.io/
Дата: 27.12.13 08:55
Оценка:
Здравствуйте, nikov, Вы писали:

N>Точно!


М-да. Решарпер при подобных экспериментах, конечно, стоит отключать...

И еще интересно, зачем компилятор позволяет делать такое:
struct S : IDisposable
{
    public void Dispose(){}
}

static void Main()
{
    using(S? s = null){}
}


Re[5]: [Этюд, C#] Ненужный null
От: nikov США http://www.linkedin.com/in/nikov
Дата: 14.01.14 03:37
Оценка:
Здравствуйте, scale_tone, Вы писали:

_>И еще интересно, зачем компилятор позволяет делать такое:

_>
_>    using(S? s = null){}
_>


Видимо, потому что вместо null может быть более сложный инициализатор (вызов метода, например), который может вернуть как null, так и значение, которое в конце нужно будет освободить с помощью Dispose. Точно так же, как и с ссылочными типами.
Re[6]: [Этюд, C#] Ненужный null
От: scale_tone Норвегия https://scale-tone.github.io/
Дата: 14.01.14 08:10
Оценка:
Здравствуйте, nikov, Вы писали:

N>Видимо, потому что вместо null может быть более сложный инициализатор (вызов метода, например), который может вернуть как null, так и значение, которое в конце нужно будет освободить с помощью Dispose. Точно так же, как и с ссылочными типами.


И правда. Оказывается, можно написать как-то так:
void DoWithUnitOfWork(Action task1, Action task2, IDisposable unitOfWorkImpl = null)
{
    using (unitOfWorkImpl)
    {
        task1(); task2();
    }
}


и оно не упадет.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.