【问题标题】:Reference a variable using a string使用字符串引用变量
【发布时间】:2015-05-04 21:00:26
【问题描述】:

我有几个变量称为:_2sVal、_3sVal、_4sVal 等 我想通过一个循环来改变它们的每一个值。 喜欢:

For i = 1 To 10
    'set the value
Next

我尝试将它们放入字典中,例如:

Dim varDict As New Dictionary(Of String, Integer)
varDict.Add("2sVal", _2sVal)
varDict.Add("3sVal", _3sVal)
varDict.Add("4sVal", _4sVal)

我可以使用检索值

MsgBox(varDict(i.ToString & "sVal"))

但是当我尝试改变它时

varDict(i.ToString & "sVal") = 5

它什么也没做。也没有错误或异常,只是值保持不变

【问题讨论】:

  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • “似乎没有工作”不是一个明确的问题描述。它似乎以什么方式不起作用?您是如何确定它不起作用的?您是如何期望它起作用的?
  • 好吧,我可以使用 MsgBox(varDict(i.ToString & "sVal")) 检索值但是当我尝试像 varDict(i.ToString & "sVal") = 5 那样更改它时什么都不做。也没有错误或异常,只是值保持不变。
  • 请点击“编辑”按钮并使用此信息更新您的问题。这类信息属于问题,而不是 cmets。

标签: vb.net variables basic refer


【解决方案1】:

当你使用时

varDict.Add("4sVal", _4sVal)

您不是将_4sVal 变量放入字典中,而是将其值。

那么,更改字典不会更改_4sVal,因为字典中没有它的引用。

我的意思是

varDict("4sVal") = 5

将更改字典的值,但不会更改变量_4sVal 本身。

我认为正确的做法是将变量定义为属性,定义如下:

Property _4sVal As Integer
    Get
        Return varDict("4sVal")
    End Get
    Set(value As Integer)
        varDict("4sVal") = value
    End Set
End Property

这样您就不必更改其余代码中的任何内容。它将是透明的。

【讨论】:

    猜你喜欢
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 2010-12-12
    相关资源
    最近更新 更多