CS8764, CS8765 Nullability of type of parameter 'value' doesn't match overridden
От: fortnum  
Дата: 16.06.22 22:10
Оценка:
Всем привет!

Проблема с Null-state analysis. Наследуем класс от System.Data.Common.DbCommand ==> имеем неустранимый warning на override CommandText.

Если сделать так, то имеем warning CS8765: Nullability of type of parameter 'value' doesn't match overridden member (possibly because of nullability attributes) — подчеркивает зеленым set:

public override string CommandText { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }


Если сделать так, то имеем warning CS8764: Nullability of return type doesn't match overridden member (possibly because of nullability attributes) — подчеркивает зеленым get:

public override string? CommandText { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }


Что вообще происходит и как его удовлетворить, устранить этот warning без suppression?



PS. Вот полный текст, может кому пригодится попробовать:

class MyDbCommand : System.Data.Common.DbCommand
{
    public override string? CommandText { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } // <== неустранимый warning
    public override int CommandTimeout { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
    public override System.Data.CommandType CommandType { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
    public override bool DesignTimeVisible { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
    public override System.Data.UpdateRowSource UpdatedRowSource { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
    protected override System.Data.Common.DbConnection? DbConnection { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }

    protected override System.Data.Common.DbParameterCollection DbParameterCollection => throw new NotImplementedException();

    protected override System.Data.Common.DbTransaction? DbTransaction { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }

    public override void Cancel()
    {
        throw new NotImplementedException();
    }

    public override int ExecuteNonQuery()
    {
        throw new NotImplementedException();
    }

    public override object? ExecuteScalar()
    {
        throw new NotImplementedException();
    }

    public override void Prepare()
    {
        throw new NotImplementedException();
    }

    protected override System.Data.Common.DbParameter CreateDbParameter()
    {
        throw new NotImplementedException();
    }

    protected override System.Data.Common.DbDataReader ExecuteDbDataReader(System.Data.CommandBehavior behavior)
    {
        throw new NotImplementedException();
    }
}
Re: [AllowNull]
От: Qbit86
Дата: 16.06.22 22:29
Оценка: 4 (1)
Здравствуйте, fortnum, Вы писали:

F>Проблема с Null-state analysis. Наследуем класс от System.Data.Common.DbCommand ==> имеем неустранимый warning на override CommandText...

F>Что вообще происходит и как его удовлетворить, устранить этот warning без suppression?

https://github.dev/dotnet/runtime/blob/8a94c7bc54a43d45c398025f07f70c99b658a4d8/src/libraries/System.Data.Common/src/System/Data/Common/DbCommand.cs#L19

[AllowNull]
public override string CommandText
{
    get => throw new NotImplementedException();
    set => throw new NotImplementedException();
}
Глаза у меня добрые, но рубашка — смирительная!
Re[2]: [AllowNull]
От: fortnum  
Дата: 16.06.22 23:02
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>

[AllowNull]


Спасибо! Несколько часов тыкал, не мог въехать. А как перечитал свое сообщение, догадался наконец загуглить эти самые nullability attributes, про которые в скобочках написано Сразу понятно стало

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/attributes/nullable-analysis#preconditions-allownull-and-disallownull

Q>https://github.dev/dotnet/runtime/blob/8a94c7bc54a43d45c398025f07f70c99b658a4d8/src/libraries/System.Data.Common/src/System/Data/Common/DbCommand.cs#L19


И вот за это тоже! Полезный инструмент, был не в курсе. Что-то подобное на codesandbox видел, но не вникал.
Re[3]: github.dev
От: Qbit86
Дата: 16.06.22 23:15
Оценка: 12 (2)
Здравствуйте, fortnum, Вы писали:

F>А как перечитал свое сообщение, догадался наконец загуглить эти самые nullability attributes, про которые в скобочках написано :facepalm: Сразу понятно стало :))


Да, nullability-разметка реализуется дюжиной атрибутов со сложными правилами. Для одного из этой дюжины в язык добавили синтаксический сахар (вопросик после типа). Но добавлением вопросика nullability analysis не исчерпывается, и в сложных случаях надо обмазываться остальными атрибутами.

F>Полезный инструмент, был не в курсе. Что-то подобное на codesandbox видел, но не вникал.


Это инструмент GitHub, можно нажать точку на странице любого репозитория (например, https://github.com/dotnet/runtime) — переадресует на github.dev и откроется веб-версия редактора VS Code.

https://www.youtube.com/watch?v=ywUZOOzLX3c
Глаза у меня добрые, но рубашка — смирительная!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.