Estoy recuperando varias propiedades de un control. Aquí es cómo he utilizado para recuperar propiedades (con pinfo de tipo PropertyInfo):Obtener por reflexión el valor de una propiedad cuyo getter tiene un valor opcional
value = pinfo.GetValue(obj, nothing)
que han funcionado bien, pero ahora estoy frente a una propiedad que tiene un valor opcional, y me sale un mensaje de error que me dice que el número de parámetros es incorrecto Así que cambié mi código por éste:
Dim index As Object() = {Nothing}
value = pinfo.GetValue(obj, index)
En este momento, no he tenido ningún mensaje de error, pero este código no recupera el valor. Sólo funciona si reemplazo Nada por el valor predeterminado proporcionado por el descriptor de acceso a la propiedad ...
¡Pero no sé de antemano cuál es este valor predeterminado! Y este código es dentro de una función que recupera propiedades que no tienen valores opcionales, por lo que no puedo cambiar el código especialmente para un caso u otro ..
¿Alguna idea? Estoy trabajando en .NET 2,0
EDIT: Más precisiones sobre el caso que lleva al problema
Este es un ejemplo de la propiedad que lleva al problema:
ReadOnly Property Foo(Optional ByVal Number As Integer = -1) As String
Get
If Number = -1 Then
Return "Your number is the default number: " & Number
Else
Return "Your number is " & Number
End If
End Get
End Property
Con este tipo de propiedad, ninguno de los códigos anteriores recupera la buena cadena.
Mi mejor conjetura sería intentar el primer código de propósito general, detectar la excepción apropiada, y luego recuperar dinámicamente el valor predeterminado del parámetro (Número en este caso) y su tipo, por lo que yo puede llamar al getValue
con este valor predeterminado.
Entonces, ¿cómo puedo recuperar el valor predeterminado del parámetro opcional?
Hola, gracias por responder, pero tu sintaxis no funciona para mí ... Al compilador no le gustan las llaves (.NET 2.0). Además, su ejemplo no funcionará para mí, ya que mi función debe recuperar el sobre todas las propiedades de una instancia de objeto, y se llama para muchos objetos diferentes. – GianT971
Y la última línea que escribió es similar a uno de mis intentos (el segundo bloque de código en mi pregunta) – GianT971
@ GianT971: Perdón, extrañé que estás usando .NET 2. Edité mi respuesta en consecuencia. –