He estado haciendo un ejemplo y me es imposible hacerlo con IIF. Entiende Verdadero cuando debería ser Falso.
Public Sub Main()
Dim apalabras As String[] = ["agua", "fuego", "aire", "aire"]
Dim cpalabras As New Collection
Get(cpalabras, apalabras)
Stop
End
Public Sub Get(cdiccionario As Collection, atemp As String[]) As Collection
Dim palabra As String
For Each palabra In atemp
'No funciona
cdiccionario[palabra] = IIf(cdiccionario.Exist(palabra), sumar(cdiccionario, palabra), 1)
' 'Si funciona
' If cdiccionario.Exist(palabra) Then
' cdiccionario[palabra] = sumar(cdiccionario, palabra)
' Else
' cdiccionario[palabra] = 1
' Endif
Next
Return cdiccionario
End
Public Function sumar(ctmpcoleccion As Collection, llave As String) As Integer
ctmpcoleccion[llave] += 1
Return ctmpcoleccion[llave]
End
Dim apalabras As String[] = ["agua", "fuego", "aire", "aire"]
Dim cpalabras As New Collection
Get(cpalabras, apalabras)
Stop
End
Public Sub Get(cdiccionario As Collection, atemp As String[]) As Collection
Dim palabra As String
For Each palabra In atemp
'No funciona
cdiccionario[palabra] = IIf(cdiccionario.Exist(palabra), sumar(cdiccionario, palabra), 1)
' 'Si funciona
' If cdiccionario.Exist(palabra) Then
' cdiccionario[palabra] = sumar(cdiccionario, palabra)
' Else
' cdiccionario[palabra] = 1
' Endif
Next
Return cdiccionario
End
Public Function sumar(ctmpcoleccion As Collection, llave As String) As Integer
ctmpcoleccion[llave] += 1
Return ctmpcoleccion[llave]
End
El efecto que hace es ir directamente a sumar cuando aun no existe la clave.
El error es:
"No coinciden los tipos, requerido Numérico, obtenido Null"
Con el grupo de sentencias if, else no hay problemas.
Os subo el ejemplo.