【问题标题】:Vb.net Call Class1.enumvb.net调用Class1.enum
【发布时间】:2017-07-16 15:10:10
【问题描述】:

您好,首先请原谅我的英语非常糟糕...

我不习惯使用结构或枚举...

我的项目中有很多课程,我正在努力组织。

My Class Duree 将包含多个枚举或结构。

我希望能够调用不同的枚举或结构。

并在相关结构上构建请求。

RepairList.vb

Public Class RepairList

    Dim Tool As New Tools
    Dim uuu As String = Tool.Find("C:\Data\1\" & Form1.TextBox2.Text & ".txt", "ProductType")
    ' Now uuu contains iPhone7,2
    uuu = uuu.Replace(",", "")
    uuu = uuu.Replace("i", "I")
    uuu = uuu.Replace(" ", "")
    uuu = uuu.Replace("P", "p")
    ' Now uuu contain Iphone72
    Dim p As Devices.Device  ' Class Devices  --> Structure --> Device
    Dim info As Reflection.FieldInfo = p.GetType().GetField(uuu)
    Dim az As Object = info.GetValue(p)
    ' Now az contains Iphone 6
    Dim toto As Object
    toto = az
    toto = toto.Replace(" ", "")
    ' Now toto contain Iphone6 the Name of the enum i woul catch in Duree
    Dim test As String = myCheckbox.Name   ' now test contains AntenneWifi
    Dim value As Integer
    value = CInt([Enum].Parse(GetType(Duree.Iphone6), test))

 End Class

Devices.vb

 Public Class Devices

 Public Structure Device

    Const Iphone41 = "Iphone 4S"
    Const Iphone51 = "Iphone 5"
    Const Iphone52 = "Iphone 5"
    Const Iphone53 = "Iphone 5C"
    Const Iphone54 = "Iphone 5C"
    Const Iphone61 = "Ihpone 5S"
    Const Iphone62 = "Iphone 5S"
    Const Iphone71 = "Iphone 6 Plus"
    Const Iphone72 = "Iphone 6"
    Const Iphone81 = "Iphone 6S"
    Const Iphone82 = "Iphone 6S Plus"
    Const Iphone84 = "Iphone SE"
    Const Iphone91 = "Iphone 7"
    Const Iphone92 = "Iphone 7 Plus"
    Const Iphone93 = "Iphone 7"
    Const Iphone94 = "Iphone 7 Plus"
End Structure

End Class

Duree.vb

Public Class Duree

Public Enum Iphone5
    'Define the Repair Time For each action.
    AntenneWifi = 35
    Batterie = 15
    BtnVolDown = 45
    BtnVolUp = 45
    BtnHome = 20
    BtnPower = 35
    CableWifiBth = 35
    CamAr = 30
    MotherBoard = 30
    FullScreen = 20
    ScreenOnly = 40
    HPExt = 35
    HPInt = 25
    SimLevier = 35
    NappeHomeLong = 30
    NappeBtnPower = 45
    NappeFacetime = 30
    NappeVolVibr = 40
    PlaqueProtectLCD = 30
    PriseJack = 40
    SimTray = 2
    Vibreur = 25
End Enum

Public Enum Iphone6
    'Define the Repair Time For each action.
    AntenneWifi = 35
    Batterie = 15
    BtnVolDown = 45
    BtnVolUp = 45
    BtnHome = 20
    BtnPower = 35
    CableWifiBth = 35
    CamAr = 30
    MotherBoard = 30
    FullScreen = 20
    ScreenOnly = 40
    HPExt = 35
    HPInt = 25
    SimLevier = 35
    NappeHomeLong = 30
    NappeBtnPower = 45
    NappeFacetime = 30
    NappeVolVibr = 40
    PlaqueProtectLCD = 30
    PriseJack = 40
    SimTray = 2
    Vibreur = 25
End Enum
End Class

我在这里只放了 2 个枚举,但我在 Duree 类中还有更多

所以在 RepairList.vb 中,我将在下面的行中替换 Duree.Iphone6

 value = CInt([Enum].Parse(GetType(Durée.Iphone6), test))

类似

value = CInt([Enum].Parse[GetType("Duree+" & toto), test))

但我找不到正确的语法。

这是我之前看过的内容的概述

Enum's and interfaces

Search for a string in Enum and return the Enum

还有很多其他的..

如果你能帮助我,非常感谢

【问题讨论】:

  • 我真的不明白你在这里尝试什么。您从变量中获取枚举的名称作为字符串,然后尝试设置与枚举值关联的整数,或者您要做什么?
  • 抱歉,我必须编辑主帖以尽量准确。
  • 我猜他的意思是找到一个基于字符串的枚举。顺便说一句,你为什么想要它?如果您的程序需要选择,枚举是防止任何错误输入的最佳方法...
  • 是的,这似乎是我需要的,但在另一个班级。我不知道如何构建对 Durée 的请求
  • 你的问题没有任何意义。不知道是语言不通还是经验不足,但没有任何意义。

标签: c# vb.net enums


【解决方案1】:

因此,尽管我确信,您所做的并不是最好的方法,但无论您尝试做什么,这里都有一种方法可以让您得到您想要的:

Dim a As Assembly = GetType(Duree).Assembly
Dim t As Type = a.GetType("YOUR_PROJECT_NAME.Duree+" & toto)

如果Duree 是命名空间的一部分,则字符串变为"YOUR_PROJECT_NAME.NAMESPACE.Duree+" & toto

现在t 包含枚举的类型,称为toto 字符串的文本(如果有,则为Nothing)。

也许有更好的方法来实现这一点,但我不知道,因为我从来不需要它。 也许如果你更好地解释你正在尝试做什么,我们可以帮助设计,所以你不需要这样的东西,因为它没有多大意义,而且这不是使用枚举的方式。

PD:不要使用特殊字符作为名称。写 Duree 而不是 Durée。

【讨论】:

  • 感谢您花时间回答。但目前“t”仍然是 epmty。
【解决方案2】:

与其尝试通过枚举和常量在类型系统中对这些信息进行编码,我认为如果将其放入数据库表中会更好地工作,您可以在应用程序启动时加载,可能放入Dictionary 对象中.一旦你这样做了,你就可以将丑陋的反射代码简化为简单的查找,并且随着新手机设备的发布,你自己也会变得更容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    相关资源
    最近更新 更多