Всем привет!
Проблема с 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();
}
}
Здравствуйте, 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();
}
Здравствуйте, 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 видел, но не вникал.
Здравствуйте, 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