【问题标题】:How to get string parts using the variable name如何使用变量名获取字符串部分
【发布时间】:2015-06-13 23:17:15
【问题描述】:

我有一个用 vb.net 编写的程序,其中包含许多彼此非常相似的变量。 例如,其中之一是

Public Shared iPhone4S_Firmware_8_0_Key = key

如您所见,我的变量由 iPhone 的型号(iPhone 4S/5 等)和固件版本(8.0/8.0.1 等)组成 现在,当用户选择“设备”+“固件”的组合时,我的工具必须在另一个名为“活动”的字符串中导出正确的变量(取决于用户的选择)。

我可以使用 if/then 组合手动执行此操作,但这会很麻烦。所以我想以这种方式进行:

Dim active as String = iPhoneModel + "_Firmware" + version + "_Key"

您可以猜到,'iPhoneModel' 和 'version' 是另外两个字符串。所以通过这种方式我总是可以动态组合正确的变量,但问题是如果我写了

Dim active as String = iPhoneModel + "_Firmware" + version + "_Key"

它认为'iPhoneModel + "_Firmware" + version + "_Key"' 是新变量的内容。 那么我怎么能说程序必须从已经存在的具有该名称的变量中获取内容?并且不将该名称作为变量的内容?

【问题讨论】:

  • 您需要将预先存在的变量保存在字典中,然后您可以进行字符串连接并将其用作字典的索引。暂时没有写和.net,所以我无法用完整的代码示例回答
  • @Andrea:不客气。另外,由于您是 StackOverflow 的新手,我想通知您,您可以通过勾选答案旁边的勾号来为好的答案投票并接受对您帮助最大的答案。在本网站上,点赞或接受的答案都算作“感谢”。

标签: .net vb.net string


【解决方案1】:

即使您知道字符串是由子部分组成的,编译器也无法知道如何将某些部分映射到“模型”,而将某些部分映射到“版本”等。

如果你有一个事物的不同部分独立有意义,你可以使用一个非常简单的类来存储这些部分:

Public Class PhoneItem
    Public Property Brand As String
    Public Property Model As String

    ' Note that there is an actual Version Type in NET
    Public Property FirmwareVer As String

    Public Property ActivationKey As String
    Public Property IsActive As Boolean

    Public Sub New(b As String, md As String)
        Brand = b
        Model = md

        FirmwareVer = ""
        ActivationKey = ""
        IsActive = False
    End Sub

    ...
    Public Overrides Function ToString() As String
        Return String.Format("{0}.{1}", Brand, Model)
    End Function
End Class

创建一个新的PhoneItem:

Dim pi As New PhoneItem("Nokia", "whizbang")
pi.FirmwareVer = "1.6.666"
pi.IsActive = SomeTest()
pi.ActivationKey = GetPhoneKey()

' create the string depending on what they choose,
' or perhaps create methods in the class to do it  
Dim thisPhone = pi.Brand & pi.Model & pi.FirmwareVer & pi.ActivationKey

类上的ToString() 方法提供了该电话项目的默认字符串表示。在这种情况下,它将返回或打印“Nokia.whizbang”作为一种唯一标识符。它可能不是用户看到的东西,但代码可能对它有用。

如果有许多可能的手机品牌/型号,您可以将它们存储在字典中并使用Make.Model 作为键(我们不知道数据的真实情况,但似乎应该是唯一的) .

' collection of PhoneItems:
Private mcolP As Dictionary(Of String, PhoneItem)
...
mcolP = New Dictionary(Of String, PhoneItem)
mcolP.Add(pi.ToString, pi)

只要您使用唯一键(第一个参数),就可以在其中存储任意数量的 PhoneItem 对象。要从集合中取出一个来使用:

Dim active As PhoneItem = mcolP("Samsung.FooBar")

另请注意,该集合可用于提供诸如 Make 和 Model ComboBoxes 的内容之类的内容,因此您不会复制数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 2013-08-27
    • 1970-01-01
    相关资源
    最近更新 更多