2015-05-12 2 views
0

Возможно ли получить содержимое переменной путем ссылки на ее имя. У меня есть куча переменных, какСсылка на значение по имени переменной

Dim _tipoEntero As String = "^[0-9].$" 
Dim _tipoTelefono As String = "^[0-9]{6}$" 

и я пытаюсь ссылаться как нечто вроде

myValue = GetVariableValue("_tipo" + validationString) 
+0

Я не верю, что вы можете сделать это без использования свойств, [здесь] (http://stackoverflow.com/questions/10338018/how-to-get-a-property-value-using-reflection), Edit : при написании этого я придумал [это] (http://stackoverflow.com/questions/7649324/c-sharp-reflection-get-field-values-from-a-simple-class) – SomeNickName

+1

Нужно ли им действительно быть переменными? Если вы просто связываете имена со строками, вы можете использовать хеш-таблицу. –

+0

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

ответ

3

Вы можете использовать Dictionary.

Dim tipos As New Dictionary(Of String, String) 

    tipos.Add("Entero", "^[0-9].$") 
    tipos.Add("Telefono", "^[0-9]{6}$") 

    myValue = tipo(validationString) 
+4

Альтернатива: Храните объекты регулярных выражений вместо строк. 'Dim tipos как новый словарь (Of String, Regex)' – Tomalak

0

Короткий ответ на ваш вопрос «Да» можно:

myValue = Me.GetType.GetField("_tipo" & validationString).GetValue(Me) 

И мы можем сделать более эффективным:

myValue = Me.GetType.GetField("_tipo" & validationString, Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance Or Reflection.BindingFlags.Public Or Reflection.BindingFlags.IgnoreCase).GetValue(Me) 

Я установил обязательные флаги, чтобы поймать как публичные и частные переменные, а также игнорируя регистр, чувствительный к вашему поиску, поэтому не имеет значения, вы вводите «_tipo» или «_TiPo».

Это ответ на ваш вопрос, но я не предлагал вам лучшего способа выполнить вашу задачу.

Смежные вопросы