Получить значение переменной по имени

Кто-нибудь знает, как динамически получить значение параметра по имени? Я пытаюсь создать функцию, которая будет динамически передавать свои параметры. Я использую Reflection, чтобы получить имя параметра, но не могу понять, как получить значение, которое было передано функции.

Пример:

Imports System.Reflection

Console.WriteLine(Test("Xyzzy"))
' Should print: Xyzzy

Function Test(ByVal x as String)
  Return GetValueByName(MethodBase.GetCurrentMethod.GetParameters(0).Name))
End Function

person user3183188    schedule 18.01.2014    source источник
comment
Не могли бы вы привести лучший пример и, может быть, цель, стоящую за ним? В этом случае я бы сказал: вернуть значение x   -  person Patrick Hofman    schedule 19.01.2014
comment
В настоящее время это невозможно в .NET. См. этот вопрос   -  person Konrad Kokosa    schedule 19.01.2014
comment
Если этот код используется внутри того же метода, который вы хотите изучить, то, конечно же, он не должен быть динамическим? Как автор метода вы уже знаете все параметры.   -  person nmclean    schedule 19.01.2014
comment
Я собираюсь создать множество функций, которые будут принимать свои параметры и вызывать процедуру в другом классе. Я просто искал способ упростить эти функции, избавившись от необходимости писать имя параметра для каждого параметра каждой функции. Также поможет, если параметры изменятся и т. Д.   -  person user3183188    schedule 19.01.2014
comment
Если параметры основаны на параметрах внешней процедуры, то разве вы еще не жестко закодировали информацию, которая может измениться, если вы сами определите функции? В таком случае, вероятно, было бы лучше сгенерировать сам исходный код через Например, шаблон T4.   -  person nmclean    schedule 19.01.2014
comment
На самом деле, шаблоны T4 могут быть полезны. Я посмотрю на них, спасибо!   -  person user3183188    schedule 19.01.2014
comment
вот аналогичный вопрос для C #: [ссылка] [1] [1]: stackoverflow.com/questions/4939508/   -  person Frank_Vr    schedule 27.03.2014


Ответы (2)


Следующий метод вернет значение свойства (с учетом имени свойства):

Public Function GetPropertyValue(propertyName As String) As Object

        Dim pi As System.Reflection.PropertyInfo = Me.GetType().GetProperty(propertyName)

        If (Not pi Is Nothing) And pi.CanRead Then
            Return pi.GetValue(Me, Nothing)
        End If

        Dim a As Type() = Nothing
        Dim mi As System.Reflection.MethodInfo = Me.GetType().GetMethod("Get" + propertyName, a)

        If Not mi Is Nothing Then
            Return mi.Invoke(Me, Nothing)
        End If

        Return Nothing
    End Function

Надеюсь, это поможет

person rubenerc    schedule 27.03.2014

Если вы хотите напечатать "Xyzzy", тогда


Console.WriteLine(Test("Xyzzy"))
' Should print: Xyzzy
Function Test(ByVal x as String)
  Return x                 
End Function

person BAASKA    schedule 08.01.2016