2016-11-11 20 views
5

我有下面的代碼行:爲什麼在不使用可爲空的布爾值的情況下設置bool的值時可以使用null條件運算符?

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

Exists在左手側是User類的屬性。它的類型只是bool,而不是bool?。右側的Exists方法是一種API方法,用於檢查存儲庫中是否存在給定實體。它返回Task<bool>。我想檢查存儲庫是否爲空,所以我使用空條件運算符。我認爲,如果存儲庫爲空,那麼整個右側將返回null,這不能分配給bool類型,但編譯器似乎沒有問題。它是否默認爲某個錯誤的值?

+0

試圖實際運行此代碼?如果沒有,嘗試,你會看到。或者想像一下,如果Exists方法返回null而不是任務 – Evk

+0

那麼會發生什麼呢''await'可能會拋出類型檢查,但是如果'repository'爲null,你會期望結果是什麼? –

回答

7

問題在於等待。 nullable發生在await之前,所以它就像await (this.repository?.Exists(id)),當this.repository爲空時,變成await (null?.Exists(id)),變成await (null),這會崩潰。這個?無法達到Task<bool>並使其成爲Task<bool?>

所以你要麼得到正確的布爾值,要麼是一個異常。

+0

啊,這是有道理的,謝謝你解釋。那我最好改變一下。 – Drew

+0

@ChadNedzlek - 根據你對我的問題的回答,我認爲這是一個很好的答案,並給了我所需要的信息。我認爲如果您發佈該文章的特定部分,答案將會很好,我會加入並接受。我感謝你的回答:) –

相關問題