C#
1#nullable enable 2 3public class Hoge 4{ 5 private object? A; 6 7 public void Init() 8 { 9 A = new object(); 10 } 11}
このようなクラスがあります。
Initメソッドは必ず実行されるため、Aフィールドにnullになる事はありません。
C#
1public class Hoge 2{ 3 private object? A; 4 5 public void Method() 6 { 7 string xxx = A!.ToString(); 8 } 9}
Aがobject?型のため、参照時にnullチェックを行うか、!マークを付けてnullチェックを回避する必要がありますが
毎回!マークを付けるのではなくAをobject?型ではなくobject型として扱いたいです
当たり前ですが、単純にobject型に変更するとコンストラクタでAに値を設定していないのでワーニングになります
C#
1[NotNull] private object? A;
少し前までNotNullAttributeを付けておこえば、上記を実現出来たのですが、この方法はバグだったのかVSを最新にするとワーニングが出るようになってしまいました。
Aをobject型として認識させるにはどうすれば良いでしょうか?
(追記:2021 4/4 12:32)
以下のようにプロパティにする方法も考えられますが、このような回避策ではなくフィールドのobject?型をobject型として認識させる方法を探しています
C#
1 public class Hoge 2 { 3 private object? _A; 4 5 private object A 6 { 7 get => _A!; 8 set => _A = value; 9 } 10 }
C# 8.0 の null 許容参照型の話ですか? そうでなければ、Object は参照型で Nullable<T> の T は値型ということなので、object? というのはエラーになるはずですが・・・
回答3件
あなたの回答
tips
プレビュー