Quiero una función para devolver una Cadena o un valor Booleano. Algo como esto:

Public Function GetString(Byval What As String) 'As... someting?
    If (What = "A") Then
        Return "String to return"
    Else if (What = "B") Then
        Return True
    End If

    Return False 'Nothing to return
End Function

¿Cómo puedo hacerlo? Si me preguntan como

If GetString("A") Then
    MsgBox(GetString())
End IF

…devuelve una cadena y, por supuesto, se da un error en la conversión de cadena a bool.
Yo siempre podría volver cadenas y comprueba la longitud, pero se siente mal. O tal vez estoy en PHP demasiado?

Pero hay una manera de hacerlo más como este? Si puedo pedir «B» sé que devuelve un bool, si puedo pedir «Un» quiero alertar a la cadena si la hubo, y así sucesivamente.

InformationsquelleAutor gubbfett | 2012-12-14

4 Comentarios

  1. 5

    ¿Cómo puedo hacerlo?

    No se puede.

    Una función sólo puede devolver un tipo, no varios.

    Puede devolver un tipo personalizado que contiene una cadena y un valor booleano.

    • Bonita y sencilla explicación! Realmente no hay manera de hacer una función de devolución de varios tipos en VB? 🙂
    • No hay manera de hacerlo en la mayoría de los idiomas.
    • Usted puede en realidad aunque no lo recomiendo.
    • El tipo de retorno de la función es object. Eso no dos diferentes tipos de retorno.
    • Sí, pero un Objeto puede ser una Cadena o un valor Booleano, así que, aunque estrictamente hablando devuelve un objeto el objeto puede tener 2 tipos.
    • Y como usted dice que usted podría volver 2 piezas de información en una Estructura así. Esto sería mejor que un objeto se guarda todo desordenado que la comprobación de que el tipo de retorno, así que usted puede hacerlo. Diciendo You can't no es cierto.
    • El objeto puede ser una Cadena o un valor Booleano o nada. El tipo de retorno es todavía Object – no Object o algo más. Como para el retorno de un tipo personalizado – sí, me mencionó que en mi respuesta.

  2. 2

    Me gustaría utilizar una lista de matrices. Usted puede almacenar cualquier tipo que usted necesita en la lista y, a continuación, analizar en el retorno. Esto no es realmente la mejor práctica, como se explicó anteriormente, pero cuando tienes que hacer las cosas… El fin justifica los medios. No se recomienda.

    Public Function GetString(Byval What As String) As ArrayList
    Dim b as boolean = True 
    dim myArrayList as Arraylist = New ArrayList
    
        If (What = "A") Then
            ArrayList.Add("String to return")
        Else if (What = "B") Then
            ArrayList.Add(b)
        End If
    
        Return False 'Nothing to return
    End Function

    Prueba de concepto a continuación:

     Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim a As Boolean = True
            Dim myarraylist As ArrayList = New ArrayList
    
            myarraylist.Add(a)
            myarraylist.Add("g")
    
            Debug.WriteLine(myarraylist.GetType.ToString)
            Debug.WriteLine(myarraylist(0).GetType.ToString)
            Debug.WriteLine(myarraylist(1).GetType.ToString)
    
            If myarraylist(0).GetType.ToString = "System.string" Then
                Debug.WriteLine("Function returned a String")
            ElseIf myarraylist(0).GetType.ToString = "System.boolean" Then
                Debug.WriteLine("Function returned a Boolean")
            End If
    
        End Sub
  3. 1

    Puede volver Object, pero se considera de muy mala forma para que una función de retorno de 2 tipos de datos.

    • Ok, ¿por qué considera de mala?
    • Porque entonces usted necesita para comprobar de qué tipo fue devuelto y convertir a la misma. Es propenso a errores y añade complejidad.
    • Es difícil de depuración para empezar E. g. If GetString("A") Then fallará. Pero más importante que eso implica que la función es realizar 2 tareas que debe estar en las 2 funciones separadas. Una función debe devolver sólo una parte de la información o si desea devolver 2, a continuación, considere el uso de una Estructura.
  4. 0

    Como Oded dicho que no se puede devolver más de un parámetro de una función.

    No es demasiado claro lo que se está haciendo desde el código de ejemplo, pero usted puede mirar en paso de parámetros por referencia. Como se señaló en la respuesta, de pasar un parámetro por referencia es útil para:

    cuando desee volver a un estado o situación de una operación más el resultado de la operación.

    Esta es la forma en int.TryParse y similares métodos de trabajo.

Dejar respuesta

Please enter your comment!
Please enter your name here