タグ付けされた質問 「nullable-reference-types」

C#8のnull可能な参照型に関連する問題。

3
?[]とは何ですか?C#の構文?
で実際に抽象クラスであるデリゲートを研究しているときに、Delegate.cs理解できない次のメソッドを見ました 戻り値が?すでにreference(class)型であるにもかかわらず使用する理由 ?[]? パラメータの意味 説明してもらえますか? public static Delegate? Combine(params Delegate?[]? delegates) { if (delegates == null || delegates.Length == 0) return null; Delegate? d = delegates[0]; for (int i = 1; i < delegates.Length; i++) d = Combine(d, delegates[i]); return d; }

4
なぜこのコードは「可能なnull参照の戻り値」コンパイラ警告を出すのですか
次のコードを検討してください。 using System; #nullable enable namespace Demo { public sealed class TestClass { public string Test() { bool isNull = _test == null; if (isNull) return ""; else return _test; // !!! } readonly string _test = ""; } } これをビルドすると、でマークされた行で!!!コンパイラ警告が表示されますwarning CS8603: Possible null reference return.。 _test読み取り専用であり、null以外に初期化されているため、これは少し混乱します。 コードを次のように変更すると、警告が消えます。 public string …

3
DTOにnull許容参照型を使用するためのベストプラクティス
DynamoDBテーブルから読み取ることで入力されるDTOがあります。現在、次のようになっているとします。 public class Item { public string Id { get; set; } // PK so technically cannot be null public string Name { get; set; } // validation to prevent nulls but this doesn't stop database hacks public string Description { get; set; } // can be null } これに対処するためのベストプラクティスはありますか?Dynamo …

2
Entity Framework CoreモデルでC#8.0 Nullable参照型を使用する方法
.NET Core 3.0プロジェクトでC#8.0 Nullable参照型を有効にしています。プロジェクトはEntity Framework Core 3.0を使用してデータベースにアクセスします。 以下は、タイトルがnullであってはならないデータモデルです。 public class Vehicle { public int Id { get; private set; } public string Title { get; private set; } // Entity Framework Core is instructed to bind to the private _drivers field in a configuration builder private readonly List<Driver> _drivers = …

1
.NETリフレクションを使用してnull可能な参照型を確認する方法
C#8.0では、null許容の参照型が導入されています。次に、null許容プロパティを持つ単純なクラスを示します。 public class Foo { public String? Bar { get; set; } } クラスのプロパティがリフレクションを介してnull可能な参照型を使用しているかどうかを確認する方法はありますか?

2
メソッドが事実上フィールドのnullチェックであることをC#のnull可能参照に通知できますか
次のコードを検討してください。 #nullable enable class Foo { public string? Name { get; set; } public bool HasName => Name != null; public void NameToUpperCase() { if (HasName) { Name = Name.ToUpper(); } } } Name = Name.ToUpper()で、Nameがnull参照の可能性があるという警告が表示されますが、これは明らかに正しくありません。HasNameをインライン化することでこの警告を解決できるため、条件は(Name!= null)になります。 HasNameからの真の応答がNameにnull可能でない制約を意味することをコンパイラーに指示する方法はありますか? HasNameは実際により多くのことをテストする可能性があり、いくつかの場所で使用したり、APIサーフェスのパブリック部分になる可能性があるため、これは重要です。nullチェックを独自のメソッドに組み込む理由はたくさんありますが、そうすることでnull可能な参照チェッカーが機能しなくなるようです。

1
C#8の不明なnull可能性とは何ですか?
C#8.0では、null許容の参照型を使用できます。ドキュメントでは、null可能性には4つのタイプがあると述べています。最初の3つは非常に明確ですが、「不明」のポイントを理解できません。ドキュメントはそれがジェネリックで使用されると言いますが、ジェネリックでT型の制約のない変数でメソッドを呼び出そうとすると、型がnull可能であるかのように警告するだけです。unknownとnullableの違いはわかりません。なぜ未知数が存在するのですか?それはどのように現れますか?

5
C#8のnullにできない参照型は、実行時にnullにできますか?
nullでない変数がnullを持たないという保証は本当にないようです。nullにできないプロパティが1つあるクラスがあるとします。 public class Foo { public Foo(string test) { Test = test; } public string Test {get;set;} } これはnullにできなくなったように見えるかもしれません。ただし、このクラスをnull許容コンテキストを使用しない別のライブラリで参照する場合、そこにnullを送信することを妨げるものはありません。 それは正しいですか、またはおそらくこれを確実にするいくつかの実行時チェックがありますか?

1
FirstOrDefaultから公開されていないnull可能な参照型情報
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でのシグネチャを見ると、その理由は明らかです。メソッドが返すのはstring、string?私が期待するnullに対応する同等のものではありません。 以下のメソッド本体を使用すると、期待した警告が表示されます。 var arg = args.Contains("abc") ? "abc" : null; return arg; (この例のSystem.Linq)システムライブラリは、.NET Core 3.0を対象とする場合、null可能性情報を実際に公開しませんか?

2
null参照が可能ではないように思われるときに、なぜ参照解除null参照の警告が表示されるのですか?
HNQでこの質問を読んだ後、C#8のNullable参照型について読み、いくつかの実験を行いました。 誰かが「コンパイラのバグを見つけた!」と言ったとき、私は10回のうち9回、またはもっと頻繁にそれを知っています。これは実際には仕様によるものであり、彼ら自身の誤解です。そして、私がこの機能を調べ始めたのは今日だけなので、明らかに私はそれをあまりよく理解していません。これが邪魔にならないように、このコードを見てみましょう: #nullable enable class Program { static void Main() { var s = ""; var b = s == null; // If you comment this line out, the warning on the line below disappears var i = s.Length; // warning CS8602: Dereference of a possibly null reference } } …

3
ORMでDTOクラスを使用する場合のC#8のnull可能な参照型
以下に示すように、データ転送オブジェクト(DTO)クラスを持つプロジェクトでこの機能をアクティブにしました。 public class Connection { public string ServiceUrl { get; set; } public string? UserName { get; set; } public string? Password { get; set; } //... others } しかし、私はエラーを受け取ります: CS8618:null可能ではないプロパティ 'ServiceUrl'は初期化されていません。プロパティをnull許容として宣言することを検討してください。 これはDTOクラスなので、プロパティを初期化していません。これは、プロパティがnullでないことを保証するためにクラスを初期化するコードの責任です。 たとえば、呼び出し元は次のことができます。 var connection = new Connection { ServiceUrl=some_value, //... } 私の質問:C#8のnull可能性コンテキストが有効になっているときに、DTOクラスでこのようなエラーを処理する方法は?

2
C#は `notnull`型をnull可能にできません
私はラストResultやハスケルに似たタイプを作成しようとしていますが、Eitherこれはここまでです: public struct Result<TResult, TError> where TResult : notnull where TError : notnull { private readonly OneOf<TResult, TError> Value; public Result(TResult result) => Value = result; public Result(TError error) => Value = error; public static implicit operator Result<TResult, TError>(TResult result) => new Result<TResult, TError>(result); public static implicit operator Result<TResult, TError>(TError …

2
構造体のクラスメンバーを持つC#8でnullの逆参照の可能性に関する警告が表示されないのはなぜですか?
null可能な参照型を有効にしたC#8プロジェクトで、次のコードを使用すると、null逆参照の可能性に関する警告が表示されるはずですが、表示されません。 public class ExampleClassMember { public int Value { get; } } public struct ExampleStruct { public ExampleClassMember Member { get; } } public class Program { public static void Main(string[] args) { var instance = new ExampleStruct(); Console.WriteLine(instance.Member.Value); // expected warning here about possible null dereference } } 場合はinstanceデフォルトコンストラクタで初期化され、instance.Memberデフォルト値に設定されてExampleClassMemberいます、null。したがって、実行時にinstance.Member.ValueがスローさNullReferenceExceptionれます。C#8のnull可能性の検出を理解しているので、この可能性についてコンパイラーの警告が表示されるはずですが、わかりません。何故ですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.