如何在枚举中包含整数字符串?

时间:2010-10-08 11:57:15

标签: vb.net visual-studio-2008 enums

我知道这是一个合适的枚举:

Private Enum Months
  JANUARY = 1
  FEBRUARY = 2
  ...
End Enum

但是,我希望有一个枚举,其中字符串将只是整数。

示例:

Private Enum ColumnCounts
  01 = 5
  02 = 4
  03 = 40
End Enum

01,02和03都是字符串。但是,如果我输入“01”,[01]或只是01,它会告诉我它期望Enum结束并且它不是有效的语句。有没有办法实现这一点,我错过了?我甚至试过了。 01.ToString(),但这不是一个选项。 :)任何和所有的帮助表示赞赏。感谢。

修改

Public Class Part

  Private Enum ColumnCounts
    f01 = 39
  End Enum

  Public Shared Function ValidateColumns(ByRef lstFields As List(Of String)) As Boolean
    For Each colCount In [Enum].GetValues(GetType(ColumnCounts))
      If colCount = "f" + lstFields(1) Then
        'Right here I need to compare the count of the list vs. the value of the enum.'
        Return True
      End If
    Next

    Return False
  End Function
End Class

基本上,我不想把f放在那里,只想做01.这将被称为:

Select Case (nRecordType)
  Case "01"
    ...
  Case "02"
    ...
  Case "03"
    Return Part.ValidateColumns(_lstFields)
End Select

因为我没有创建它的实例而没有调用构造函数,所以没有办法自动填充Dictionary。我不想转换为整数,所以我不打算做一个数组。这是为了以防万一,最终价值高于99,下一个值为A0。我试图想到将来容易改变这个和向后兼容性。如果您需要更多解释,请告诉我。

编辑2:

这就是我现在所做的,我认为它应该有效:

Public Class Part

  Private Shared columnCounts As Dictionary(Of String, Integer) = New Dictionary(Of String, Integer)

  Public Shared Function ValidateColumns(ByRef lstFiels As List(Of String)) As Boolean
    InitializeColumnDictionary()

    Return lstFields.Count = columnCounts(lstFields(1))
  End Function

  Private Shared Sub InitializeColumnDictionary()
    columnCounts.Add("01", 39)
  End Sub
End Class

我现在还没有能够测试它,所以我无法验证它会做我想做的事情,但是当我构建它时它不会给我一个错误所以我是我的手指交叉。

6 个答案:

答案 0 :(得分:3)

仅整数不是有效的标识符。 你为什么要把01称为标识符? 使用字母为枚举元素添加前缀,您就完成了:

i01,
i02
...

根据您的修改进行修改: 声明一个静态字典,并在静态方法中填充它,如果它为null:

private static void yourMethod()
        {
            if (ColumnCounts == null)
            {
                ColumnCounts = new Dictionary<String, int>();
                ColumnCounts.Add("01", 39);
                ColumnCounts.Add("02", 45);
                ColumnCounts.Add("03", 12);
                ColumnCounts.Add("04", 0);
            }




        }



        private static Dictionary<String, int> ColumnCounts = null;

答案 1 :(得分:2)

枚举元素是标识符;和标识符必须以字母(或下划线)开头。所以,我很抱歉,但这是不可能的。

注意:在评论后更正了开始字符。

答案 2 :(得分:1)

您需要使用valid identifiers - 不能以数字开头。

答案 3 :(得分:0)

抱歉,不可能让任何类型的标识符以整数开头。你可以这样做:

Private Enum ColumnCounts
  n01 = 5
  n02 = 4
  n03 = 40
End Enum

答案 4 :(得分:0)

对于您的枚举,您应该使用Column01作为标识符。稍后在你的代码中,如果你不需要01部分,你可以随时调用.ToString()并修剪Column部分。

Private Enum ColumnCounts 
  Column01 = 5 
  Column02 = 4 
  Column03 = 40 
End Enum 

答案 5 :(得分:0)

$ 02

Private Enum foo As Integer
    _01 = 1
    _02 = 2
    _03 = 3
    _04 = 4
End Enum

Dim bar As IEnumerable(Of String) = (From membr In [Enum].GetNames(GetType(foo)) Select membr.Replace("_", ""))

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Dim nRecordType As String = "03"

    Select Case nRecordType
        Case bar(0)
            Debug.WriteLine("stop1")
            Stop
        Case bar(1)
            Debug.WriteLine("stop2")
            Stop
        Case bar(2)
            Debug.WriteLine("stop3")
            Stop
        Case bar(3)
            Debug.WriteLine("stop4")
            Stop
    End Select

End Sub