FirstOrDefaultから公開されていないnull可能な参照型情報


10

C#8.0 の新しいnull許容参照型機能をテストしたかったのです。

.NET Core 3.0を対象とする新しいプロジェクトを開始し、.csprojファイルでnull許容の参照型を有効にして、コーディングを開始しました。私はaを取り、その配列に等しいstring[]を返す単純なリストを作成しました。ここで、配列に実際に存在するかどうかは定かでないので、を使用します。これは、一致が見つからない場合にデフォルトになるはずです。stringabcabcFirstOrDefault()null

using System;
using System.Linq;

public string FindArgument(string[] args)
{
    var arg = args.FirstOrDefault(x => x == "abc");
    return arg;
}

私のメソッドはを返しますstring。これnullにできないタイプになっているはずです。nullFirstOrDefault()が返される可能性があるのでnull、上記のメソッドはnull可能性があるarg変数を返すときに警告を生成することを期待します。ありません。

FirstOrDefault()Visual Studioでのシグネチャを見ると、その理由は明らかです。メソッドが返すのはstringstring?私が期待するnullに対応する同等のものではありません。

以下のメソッド本体を使用すると、期待した警告が表示されます。

var arg = args.Contains("abc") ? "abc" : null;
return arg;

(この例のSystem.Linq)システムライブラリは、.NET Core 3.0を対象とする場合、null可能性情報を実際に公開しませんか?

回答:


9

System.Linq3.0リリースではnullableアノテーションが付けられていないように見えます。したがって、Nullable参照型は正しい警告を発しません。

roslyn repoで同様の問題を確認できます。Githubでのこの未解決の問題は、あなたの問題とよく似ています。その問題では、寄稿者が現在の問題を説明しています:

System.Linqcorefxのマスターブランチではnullアノテーションが可能ですが、release / 3.0ではできません。したがって、コンパイラには予期しないことは何もありません。コンパイラーは、null可能で気付かないものを使用していることを示すいくつかの診断を提供する必要があります。


これに追加するには、このパッケージを使用して、今日適切な注釈を取得できます。
canton7

1
これは、.NET Core 3.1でも同じです。これにより、null許容の参照型での作業が不快になります。プルリクエストcorefx / pull / 40651がこれを修正すると思いますが、どうやら.NET 5がそれを取得するまで待たなければならないでしょう:-(
Jeppe Stig Nielsen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.