2016-11-11 12 views
5

私は次のコード行があります。左側にnullのboolを使用せずにboolの値を設定するときにnull条件演算子を使用できるのはなぜですか?

user.Exists = await this.repository?.Exists(id); 

ExistsUserクラスのプロパティです。そのタイプはboolで、bool?ではありません。右側のExistsメソッドは、特定のエンティティがリポジトリに存在するかどうかを確認するAPIメソッドです。それはTask<bool>を返します。私は、リポジトリが最初にnullであるかどうかを確認したいので、null条件付き演算子を使用します。私は、リポジトリがnullの場合、右辺全体がNULLを返すことになり、bool型に代入することはできませんが、コンパイラはそれで問題ないと思います。それは何らかの形で偽の値にデフォルトするだけですか?

+0

このコードを実際に実行しようとしましたか?そうでない場合は、試してみてください。 ExistsメソッドがTaskの代わりにnullを返すとどうなるか想像してください。 – Evk

+0

'await'は型チェックを捨てているかもしれませんが、' repository'がnullの場合、どのような結果になると思いますか? –

答えて

7

問題は待ち受けています。 nullableは待機する前に起こっているので、await (this.repository?.Exists(id))のようになります。このリポジトリがnullの場合、await (null?.Exists(id))に変わり、await (null)になり、クラッシュします。 ? Task<bool>に届くことができず、Task<bool?>になります。

したがって、適切なブール値または例外を取得します。

+0

ああ、それを説明していただきありがとうございます。私はそれを変更する方が良い。 – Drew

+0

@ChadNedzlek - あなたの答えは私の質問では、私はそれが良い答えだと思って、私に探していた情報を私に与えた。私はあなたがその記事の特定のセクションを投稿すれば答えは良くなり、私はupvote&受け入れるだろうと思う。私はあなたの答えに感謝:) –

関連する問題