我知道这是一个合适的枚举:
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
我现在还没有能够测试它,所以我无法验证它会做我想做的事情,但是当我构建它时它不会给我一个错误所以我是我的手指交叉。
答案 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