使用字符串变量从模块中引用属性的 VB 参考

4
我有一个公共属性模块(名称为Constants),其中没有任何属性与特定对象相关联。我需要根据字符串变量的值调用这些属性。该变量的值将是我需要使用的属性的名称。
我知道这种情况下最好的选择是CallByName,但是它需要一个对象来获取属性,而在这种情况下我提到,这个对象不存在。
例如,变量应该采用的第一个值是“Master”。当该变量被调用时,我希望能够使用该变量来调用属性Master(一个作为公共属性声明的字符串数组)。
谢谢!

3
您可以使用反射来实现此操作。但值得一提的是,在大多数情况下,使用一个Dictionary对象来存储这些命名的值会更好地设计。 - Steven Doggart
2
现在这听起来绝对是一个字典的工作。您可以创建一个字典,其中每个键的值都包含一个对象列表。例如,您可以创建一个Dictionary(Of String, List(Of Object))。 - Steven Doggart
我已经设置好所需的字典,并且它们似乎正在工作。但将来如果想要为多个报表使用一组共同的存储属性,最佳的架构方式是什么?我的想法是遍历一个字符串数组来获取报表名称,然后将变量设置为我正在尝试生成的报表类型的名称,最后使用该变量来查找多个不同类型的属性。 - JMichael
1
没有更多的细节,很难回答这个问题。 - Steven Doggart
你能添加一些代码片段吗? - Derek Tomes
显示剩余2条评论
2个回答

1

我觉得你正在尝试以与枚举值相同的方式使用字符串。有几种方法可以解决这个问题,但是这里有一个简单的示例,可能会帮助你考虑将字符串解析为常量编程问题的方法。

Namespace Constants

Public Enum Priorities
    Unknown = 0
    Low = 1
    Medium = 2
    High = 3
    VeryHigh = 4
End Enum

Public Class ConverterTo
    Public Function Priority(ByVal value As String) As Constants.Priorities
        Select Case value.ToLower
            Case "low"
                Return Priorities.Low
            Case "medium"
                Return Priorities.Medium
            Case "high"
                Return Priorities.High
            Case "veryhigh"
                Return Priorities.VeryHigh
            Case Else
                Return Priorities.Unknown
        End Select
    End Function
End Class
End Namespace

1
我会更改一些名称,但基本思路(使用“Select Case”)是正确的...另外,如果你有很多这样的情况,你应该将其转换为字典查找。 - Joel Coehoorn
抱歉,但不是很多。意图是使用属性来存储计数和对象(包括所有细节的计数项,以便我可以推出任何值)。Steven提到的字典想法让我有了很大的进展。我遇到了一些问题,但我相信这只是需要调整我的实现方式。 - JMichael
也许你可以调整一下问题,包括相关信息和你目前的代码,这样我们就可以共同为一个好的解决方案做出贡献。 - Jamie Clayton

0
所以我最终不得不声明一个ConsObj实例(最初发布后进行了重命名),并将该对象传递给输出属性值的函数。感谢大家的建议,有些人给了我在脚本的其他地方如何更好地完成一些其他事情的想法。很抱歉我没有发布代码,因为代码在没有互联网访问权限的网络上。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接