2013年11月19日

VB.NET的IIF 陷阱

如果我們要判斷某條件,True時給變數A值,False變數B值

在vb.net 2有IIF這指令,MSDN上的解釋
Public Function IIf( _
ByVal Expression As Boolean, _
ByVal TruePart As Object, _
ByVal FalsePart As Object _
) As Object

IIF的運作是TrePart和FalsePart的物件都會運算,萬一我們的判斷是包含運算 Nothing或是除0的overflow,就會出錯
舉個例,我們要把一個資料欄位的值Student_Data.Rows(0).Item("Name")給變數 name

Dim name as string

if Age = 0 then

  name = ""

else
  name = Student_Data.Rows(0).Item("Name")
end if



如果套到IIF


Dim name as string
name = iif(Age = 0,"", Student_Data.Rows(0).Item("Name"))


看似對,但是當Student_Data.Rows沒有資料時,就會有 exception


因為False Part也會被運算


還好在VS 2008之後有If這指令


If( [argument1,] argument2, argument3 )


它是true只跑True Part路徑,不會也運算 Fasle Part路徑


所以我們直接用


name = if((Age = 0,"", Student_Data.Rows(0).Item("Name"))


就不會有錯



參考:


MSDN

if


iif 
Article


if improved iif

沒有留言:

張貼留言