Как стать автором
Обновить

Комментарии 11

В ошибке на 9-ом месте, учитывает ли анализатор, что ioPendingRequests может быть свойством расширения для nullable типа, которое всегда возвращает не null?

Я не слышал о том, что в C# появились extensions свойства. Можете, пожалуйста, более конкретно описать сценарий, о котором вы говорите?

В любом случае, предупреждение анализатора связано не с тем, что ioPendingRequests — null. Речь идёт о том, что ctx.prevCtx может быть null, а это значит, что и всё выражение ctx.prev Ctx?.ioPendingRequests может быть null (т. к. используется оператор '?.'), вне зависимости от того, что возвращает ioPendingRequests.

Да, извиняюсь, перепутал с Partial Properties из C# 13. Это совсем не то.

Но если бы было не ioPendingRequests, а getIoPendingRequests() - то это вполне могло быть методом расширения в nullable ref types коде, например так:
public static List<int> getIoPendingRequests(this ctxType? ctx) => []
то выражение Ctx?.getIoPendingRequests() уже не может быть null.

Ctx?.getIoPendingRequests()

Это в любом случае будет null. ? оператор не дает вызвать метод, если ссылка null, без разницы, это extension метод или метод класса.

Если я правильно понял описанный вами кейс, то null всё ещё может быть.

Можете сами проверить:

MyClass? myClass = null;
var list = myClass?.GetList();
Console.WriteLine(list == null); //true

public class MyClass 
{
    public static MyClass Instance => new MyClass();
}


public static class MyExtensions
{
    public static List<MyClass> GetList(this MyClass myClass) => [];
}

Спасибо за ответы! Я тоже перепроверил. Вы полностью правы.
Да, можно сделать extension на string? или int?, но при вызове не будет ?. В случае с объектным типом даже IDE выдаёт предупреждение, а в случае с value-type вообще ошибка компиляции.

Вот так и появляются такие ошибки в коде, когда базовые правила языка забываются ))

Пункт со слабой ссылкой интересный. Получается, что API подталкивает к написанию некорректного кода?

В каком-то смысле да. Хотя в документации есть уточнение о подобном поведении.

А судьи кто? Я в смысле, это мнение одного автора или был опрос унутренний, или это топ по частоте всплывания в репортах или еще чего?

В статье явно указал:

Уточню, что топ составлялся исходя из субъективного мнения автора.

(wr.Target as TextGenerator).Invalidate();

Вообще, здесь тоже есть вопросы. Если wr.Target - не TextGenerator, то упадет. Видимо, внешняя логика подразумевает, что в этом месте "мамой клянусь" всегда будет TextGenerator, но такой подход запросто со временем приведет к ошибкам.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий