2010-04-02 61 views
0

我是C#程序員,但在VB.Net中涉獵,因爲我的團隊中的其他人都使用它。爲了職業發展的利益,我想縮小以下If ... Else ...聲明。如何縮短這個If ... Else ...語句來檢查日期的狀態?

If cmd.Parameters("@whenUpdated").Equals(DBNull.Value) Then 
    item.WhenUpdated = Nothing 
Else 
    item.WhenUpdated = cmd.Parameters("@whenUpdated").Value 
End If 

我很欣賞示例已經可用,但我無法得到它在這個特定的情況下工作。

乾杯,伊恩。

+1

雖然不是很明顯,這幾乎是重複的http://stackoverflow.com/questions/576431/is-there-a-conditional-ternary-operator-in-vb-net – 2010-04-02 22:42:00

+1

是不是這樣的錯誤怎麼辦? – 2010-04-02 22:42:33

+0

謝謝我看到了這個問題,但不明白如何在這種情況下應用它。我看你已經投票結束了。這很好,我有我需要的答案。 – 2010-04-02 22:43:28

回答

6

使用如果作爲一個函數而不是聲明:

item.WhenUpdated = If(cmd.Parameters("@whenUpdated").Equals(DBNull.Value), cmd.Parameters("@whenUpdated").Value, Nothing) 
+0

完全按照要求工作。非常感謝。 – 2010-04-02 22:46:13

+0

你仍然必須把這兩次'cmd.Parameters(「@ whenUpdated」).value'。爲什麼不寫一個DBNull2Nothing函數?使它更短和自我記錄? – MarkJ 2010-04-03 17:43:38

2
item.WhenUpdated = Nothing 
If cmd.Parameters("@whenUpdated").Equals(DBNull.Value) Then 
    item.WhenUpdated = cmd.Parameters("@whenUpdated").Value 
End If 

只有1行,但仍然較短。

IF函數絕對是最短的,但不是最具可讀性的。

+1

你也可以在聲明中放置= Nothing,所以Dim WhenUpdated爲Date = Nothing。這將節省另一行:-) – CResults 2010-04-02 22:46:18

+0

我不能這樣做@CResults,因爲它是一個數據對象。 ;-) – 2010-04-02 22:48:46

+0

嗯,我可以...... :-) – 2010-04-02 22:49:02

3

與C#中的三元運算符類似,VB有IIF function

item.WhenUpdated = IIF(cmd.Parameters("@whenUpdated").Equals(DBNull.Value), 
          cmd.Parameters("@whenUpdated").Value, 
          Nothing) 

如果第一個參數(布爾表達式)的計算結果爲true,則從函數返回第二個參數。如果第一個參數爲false,則返回第三個參數。

+2

IIf函數不會短路並返回必須強制轉換的Object類型。只要你使用VB2008,最好使用新的If三元運算符。 – 2010-04-02 22:43:40

+0

很高興知道。幾年前,我放棄了VB,並沒有做太多的工作。 – womp 2010-04-02 22:45:09

+0

我變得嫉妒綠色。 – 2010-04-02 22:48:46

0

少了一個線

item.WhenUpdated = Nothing 
If cmd.Parameters("@whenUpdated").Equals(DBNull.Value) Then 
    item.WhenUpdated = cmd.Parameters("@whenUpdated").Value 
End If 
0

使用運營商如果(...)如果你想短路行爲。

如果您不想要短路行爲,請使用IIf(...)功能。