定义一个枚举型的变量(Enum),如:
Public Enum Status
Initial = 0
Process = 1
Finished = 2
End Enum
如果使用Dim strValue As String = Status.Initial.toString()
得到的strValue的值为“Initial”,从这个方面来说上面这句话与
Dim strValue As String = Status.Initial.toString("G")等价。
而我们时常需要得到的是枚举型数据对应的值,也就是当我们使用Status.Initial的时候,往往希望得到的是0。
要得到值,应该这样写:
Dim strValue As String = Status.Initial.toString("D")
或者使用强制转换
CStr(Status.Initial)也可以达到相同的效果。
用Reflector看了一下Enum.toString()的具体实现,看不懂。请高手指点一下,感激不尽!
具体的实现代码是:
public override string ToString() { Type type1 = base.GetType(); FieldInfo info1 = Enum.GetValueField(type1); object obj1 = ((RuntimeFieldInfo) info1).InternalGetValue(this, false); return Enum.InternalFormat(type1, obj1); } |
--------------------------------------------------
以下是从MSDN中找到的有关toString([expression])中参数代表意思的解释:
可以使用 ToString 方法创建新的字符串对象,以表示 Enum 的数字、十六进制或字符串值。此方法采用某个枚举格式化字符串指定希望返回的值。
下表列出了枚举格式化字符串及其返回的值。这些格式说明符不区分大小写。
格式字符串 | 结果 |
---|---|
G 或 g | 如有可能,将枚举项显示为字符串值,否则显示当前实例的整数值。如果枚举定义中设置了 Flags 属性,则串联每个有效项的字符串值并将各值用逗号分开。如果未设置 Flags 属性,则将无效值显示为数字项。 |
F 或 f | 如有可能,将枚举项显示为字符串值。如果值可以完全显示为枚举项的总和(即使未提供 Flags 属性),则串联每个有效项的字符串值并将各值用逗号分开。如果值不能完全由枚举项确定,则将值格式化为整数值。 |
D 或 d | 以尽可能短的表示形式将枚举项显示为整数值。 |
X 或 x | 将枚举项显示为十六进制值。按需要将值表示为带有前导零,以确保值的长度最少有八位。 |
下面的示例定义一个名为 Colors 的枚举,该枚举包含三项:Red、Blue 和 Green。
Public Enum Colors Red = 1 Blue = 2 Green = 3 End Enum
public enum Colors{Red = 1, Blue = 2, Green = 3}
定义了枚举后,可以按下面的方式声明实例。
Dim MyColors As Colors = Colors.Green
Colors MyColors = Colors.Green;
下面的示例使用枚举格式化方法将 DayOfWeek 枚举的字符串、数字和十六进制表示形式赋予字符串 MyString。此代码创建 DayOfWeek 枚举的新实例(名为 MyDays),并为其赋值 Friday。然后,它使用“G”、“F”、“D”和“X”格式化字符串将不同的枚举表示形式赋予 MyString。
Dim MyDays As DayOfWeek = DayOfWeek.Friday Dim MyString As String = MyDays.ToString("G") ' In the U.S. English culture, MyString has the value: "Friday". MyString = MyDays.ToString("F") ' In the U.S. English culture, MyString has the value: "Friday". MyString = MyDays.ToString("D") ' In the U.S. English culture, MyString has the value: "5". MyString = MyDays.ToString("X") ' In the U.S. English culture, MyString has the value: "00000005".
DayOfWeek MyDays = DayOfWeek.Friday; String MyString = MyDays.ToString("G"); // In the U.S. English culture, MyString has the value: "Friday". MyString = MyDays.ToString("F"); // In the U.S. English culture, MyString has the value: "Friday". MyString = MyDays.ToString("D"); // In the U.S. English culture, MyString has the value: "5". MyString = MyDays.ToString("X"); // In the U.S. English culture, MyString has the value: "00000005".