2013-05-15 173 views
4

也許一個小問題,但我好奇。具有默認值的可爲空布爾值或布爾值?

什麼是青睞?

在控制器操作中,傳遞參數時,何時以及如何使用它們?

public ActionResult Action(bool aBool = false) 

public ActionResult Action(bool? aNullableBool) 

我傾向於使用defualt價值作爲其有點更清晰eassier檢查,但我在想錯了嗎?

+0

想想你的DB中的列是否爲空。如果是的話,使用可空 –

+0

這裏有第三種方式扔在那裏:'公衆ActionResult行動([DefaultValue(false)] bool aBool):) :) – mattytommo

+0

@mattytommo yuck :) – Silvermind

回答

5

這兩個不相等。在第一個例子中,呼叫者必須指定truefalse,如果他不,則使用false

在第二行中,主叫方可以提供truefalsenull。您需要決定如何處理null。這是你可以得到的第三個價值。另外,調用者不能省略它。他需要來傳遞一個值。

+0

也許我錯了,但是如果你在第二個例子中忽略了它的值,它將是空的。 – Silvermind

+3

@Silvermind這是不正確的,類型是可以爲空的**不是**可選的,細微的差異,但可以爲空,你需要指定的東西,即使它只是null。 – mattytommo

+0

@Silvermind,如果你想這樣做,你必須寫: public ActionResult Action(bool?aNullableBool = null) – Floc

0

我認爲路由配置中的默認值是最好的。

0

這取決於你的布爾角色。

如果你想擁有一個默認值或者沒有(默認行爲+只是一個其他行爲),那麼這個方法只有2個行爲。

如果您想要將第三個行爲作爲默認行爲,您將需要使用可空的布爾值。

因此,考慮您的方法的需求,並相應地選擇。

2

.HasValue可空變量的屬性有時可能非常方便。有一個可空的布爾就像在一個布爾有一個布爾。將Chuong Les example與數據庫結合起來,當你閱讀一個單元格時,你可能想要在繼續​​之前檢查該單元格是否實際上保留了一個值(並且最後會出現錯誤)。

在讀取單元格之前,您可以使用可爲空的變量並使用if (aNullableBool.HasValue)來確保您有一個值,然後再繼續。

該beeing說,除非你運行變量的風險獲得值null你應該使用默認值。