【问题标题】:VB Reference a Property from a Module based on string variableVB基于字符串变量从模块中引用属性
【发布时间】:2014-05-13 05:59:02
【问题描述】:

我有一个公共属性模块(根据它的价值命名为常量),其中没有一个与任何特定对象相关联。我需要根据字符串变量中的值调用这些属性。该变量的值将是我需要使用的属性的名称。

我所知道的此类事情的最佳候选者是 CallByName,但这需要一个对象来获取属性,正如我所提到的,在这种情况下不存在。

例如,变量应该取的第一个值是“Master”。到时候我希望能够使用该变量来调用属性 Master()(声明为公共属性的字符串数组)。

提前致谢!

【问题讨论】:

  • 你可以使用反射来做到这一点。不过值得一提的是,在大多数情况下,使用Dictionary 对象来存储这些命名值会是更好的设计。
  • 进一步思考我给出的例子可能不是最好的。我需要引用的大多数属性都是对象列表。当我将来自一个来源(我公司的数据库)的数据与来自我们客户的数据库的数据进行比较时,它们会被填充。然后我打算使用这些列表来输出我们有冲突数据的问题记录,或者我们中的一个或两个有坏数据。如果我简单地声明一个虚拟对象类来存储属性以便我可以使用反射或 callbyname 会更好吗?
  • 现在这听起来绝对像是字典的工作。您可以制作一个包含对象列表的字典,因为它是每个键的值。例如,您可以创建一个 Dictionary(Of String, List(Of Object))。
  • 我已经设置了我需要的字典,它们似乎正在工作。对于未来,构建一组通用存储属性以供多个报告使用的最佳方式是什么?我的想法是我将通过报告名称的字符串数组进行交互,将变量设置为我要生成的报告类型的名称,然后使用该变量查找不同类型的多个属性。
  • 如果没有更多细节,这将很难回答。

标签: vb.net properties


【解决方案1】:

在我看来,您尝试以与 Enum 值相同的方式使用字符串。有几种方法可以做到这一点,但这里有一个简单的示例,它可能会帮助您考虑将字符串解析为常量编程问题的方法。

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

【讨论】:

  • 我会更改一些名称,但基本想法(使用Select Case)是合理的......此外,如果你有很多这些,你应该把它变成一个改为字典查找。
  • 对不起,但不是那么多。目的是属性用于存储计数和对象(被计数的项目包括它们的所有详细信息,因此我可以从它们中推出我想要的任何值)。史蒂文提到的字典想法让我受益匪浅。我遇到了一些麻烦,但我确信这只是调整我的实现的问题。
  • 也许您可以调整问题以包含该信息和您目前拥有的代码,这样我们都可以为一个好的解决方案做出贡献。
【解决方案2】:

所以我最终要做的是声明一个 ConsObj 的实例(自最初发布以来有一个重命名),该对象现在被传递给从属性中输出值的函数。

感谢大家的建议,有些人给了我关于如何在脚本的其他地方做得更好的想法。抱歉,我从未发布过代码,只是有点麻烦,因为代码在没有互联网访问的网络上。

【讨论】:

    猜你喜欢
    • 2019-12-17
    • 2019-11-28
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多