Re[5]: C# 7: non-null - кому от него легче?
От: AlexRK  
Дата: 02.12.16 17:04
Оценка: 46 (1)
Здравствуйте, Kolesiki, Вы писали:

K>Я вот перечитал трэд и всё ещё считаю, что никого этот NonNull не спасёт — этих предупреждений будет СЛИШКОМ МНОГО, чтобы честно на них реагировать.


Если сделать правильно, то никаких предупреждений не будет, будет ошибка компиляции в том месте, где идет вызов потенциально нуллабельного объекта.

public class MyObj
{
    public void Go()
    {
        // ...
    }
}

public class MyClass
{
    private MyObj Foo()
    {
        // ...
    }

    private [NotNull] MyObj Bar()
    {
        // ...
    }

    public void Test()
    {
        var fooResult = Foo();

        // ошибка компиляции! fooResult может быть равно null
        //fooResult.Go();

        // а вот так - работает
        if (fooResult != null)
            fooResult.Go();


        var barResult = Bar();

        // работает без всяких проверок, так как barResult гарантированно не равен null
        barResult.Go();
    }
}
}



Вообще по уму надо бы конечно инвертировать — атрибут должен быть не NotNull, а Null. А not null должен быть у всех параметров по умолчанию. Короче так же, как и с value-типами.
Для компиляции старого говнокода ввести ключ -crapcode, который будет компилять в старом режиме.

Однако что-то мне подсказывает, что сделают через жопу и действительно будет убогое говно с предупреждениями (каким сейчас являются контракты).
Отредактировано 02.12.2016 17:12 AlexRK . Предыдущая версия . Еще …
Отредактировано 02.12.2016 17:07 AlexRK . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.