Я извлекаю несколько свойств элемента управления. Вот как я использовал, чтобы получить свойство (с pinfo типа PropertyInfo):Получите отражением значение свойства, у которого получатель имеет необязательное значение
value = pinfo.GetValue(obj, nothing)
Это работало хорошо, но теперь я столкнулся свойство, которое имеет дополнительное значение, и я получаю сообщение об ошибке говорит мне, что количество параметров неверно. Поэтому я изменил код на этот:
Dim index As Object() = {Nothing}
value = pinfo.GetValue(obj, index)
На данный момент, я не получал никаких сообщений об ошибках, но этот код не извлекает хорошее значение. Он работает только в том случае, если я заменяю Ничто по умолчанию, предоставленное имущественным доступом ...
Но я не знаю заранее, что это за значение по умолчанию! И этот код в функции, которая извлекает свойства, которые не имеют дополнительных значений, поэтому я не могу изменить код, особенно для одного случая.
Любая идея? Я работаю на .NET 2,0
EDIT: больше Precisions о случае, ведущей к проблеме
Вот пример имущества приводит к проблеме:
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
С этот вид собственности, ни один из вышеперечисленных кодов не возвращает хорошую строку.
Мое предположение было бы попробовать первый код для общих целей, поймать соответствующее исключение, а затем динамически получить значение по умолчанию параметра (Номер в этом случае) и его типа, так что я может вызвать getValue
с этим значением по умолчанию.
Итак, как я могу получить значение по умолчанию для необязательного параметра?
Привет, thx для ответа, но ваш синтаксис не работает для меня ... Компилятор не любит привязки (.NET 2.0). Кроме того, ваш пример не будет работать для меня, так как моя функция должна извлекать все свойства экземпляра объекта и вызывается для множества разных объектов. – GianT971
И последняя строка, которую вы написали, похожа на одну из моих попыток (второй блок кода в моем вопросе) – GianT971
@ GianT971: Извините, пропустил, что вы используете .NET 2. Отредактировал свой ответ соответственно. –