2013-06-05 5 views
0

Привет У меня есть следующий код:vb.net Как ссылаться на локальную переменную

Dim ColMap As Integer = Val(Microsoft.VisualBasic.Left(dr("MappedTo").ToString(), 3)) 
Dim ValorLeido As String 

ValorLeido = temp(dr("NoColumn").ToString()) 

Select Case ColMap 
     Case 101 
     _101 = ValorLeido 
     Case 102 
     _102 = ValorLeido 
     Case 103 
     _103 = ValorLeido 
End Select 

Есть ли способ, что я могу использовать что-то вроде меня («_» & ColMap) = ValorLeido ??

+1

Вам нужно включить больше кода, есть выделить происходит в этом блоке, который ambigeous к прохожему. Или добавьте немного больше деталей к вашему вопросу. Трудно сказать, какова ваша цель. – DarrenMB

+0

Технически возможно использование Reflection. Если целевыми переменными являются Public, вы можете использовать устаревшую функцию CallByName(), упрощая синтаксис. Он будет работать, только если переменные находятся в классе, но поскольку CallByName() не будет работать с модулями. –

ответ

0

Вот упрощенный пример, показывающий CallByName(). Обратите внимание на целевые переменные Public:

Public Class Form1 

    Public _101 As String 
    Public _102 As String = "{Default Value}" 
    Public _103 As String 

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
     Debug.Print("Before: _102 = " & _102) 

     Dim ColMap As Integer = 102 
     Dim ValorLeido As String = "Hello World!" 

     Dim varName As String = "_" & ColMap 
     CallByName(Me, varName, CallType.Let, ValorLeido) 

     Debug.Print("After: _102 = " & _102) 
    End Sub 

End Class 

И вот то же самое через Отражение, что позволяет целевые переменные быть Private:

Imports System.Reflection 
Public Class Form1 

    Private _101 As String 
    Private _102 As String = "{Default Value}" 
    Private _103 As String 

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
     Debug.Print("Before: _102 = " & _102) 

     Dim ColMap As Integer = 102 
     Dim ValorLeido As String = "Hello World!" 

     Dim varName As String = "_" & ColMap 
     Dim fi As FieldInfo = Me.GetType.GetField(varName, Reflection.BindingFlags.Public Or Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Instance) 
     fi.SetValue(Me, ValorLeido) 

     Debug.Print("After: _102 = " & _102) 
    End Sub 

End Class 
+0

В другом дизайне приложения вы могли бы использовать [Словарь] (http://msdn.microsoft.com/en-us/library/xfhwa508.aspx), чтобы связать эти два значения вместе. –

0

Попробуйте использовать носитель информации предназначенный для хранения серии идентификаторов к ряду значений, таких как словарь

Dim ColMap As Integer = Val(Microsoft.VisualBasic.Left(dr("MappedTo").ToString(), 3)) 
Dim ValorLeido As String = temp(dr("NoColumn").ToString()) 
Dim Lookup as New Generic.Dictionary(of Integer,String) 
Lookup(ColMap) = ValorLeido 

' 1 way of Reading values out of a dictionary safely 
Dim Value as string 
Value="" 

if lookup.trygetvalue("101",value) then 
    msgbox("Value for 101 is """ & value & """") 
else 
    msgbox("Value for 101 is not found) 
end if 

Вы также можете получить доступ с помощью одного индексированного свойства, если эта структура уже существует

public property Value(Index as integer) as string 
    get 
     select case index 
      case 101 
        return _101 
      case 102 
        return _102 
      case 103 
        return _103 
      case else 
        Throw new exception("Index not present " & index) 
    end get 
    set (value as string) 
     ' populate with reverse process ... 
    end set 
end property 
Смежные вопросы