Enum的toString方法

定义一个枚举型的变量(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])中参数代表意思的解释:

.NET Framework 开发人员指南 
枚举格式字符串 

 

可以使用 ToString 方法创建新的字符串对象,以表示 Enum 的数字、十六进制或字符串值。此方法采用某个枚举格式化字符串指定希望返回的值。

下表列出了枚举格式化字符串及其返回的值。这些格式说明符不区分大小写。

 
格式字符串 结果

G 或 g

如有可能,将枚举项显示为字符串值,否则显示当前实例的整数值。如果枚举定义中设置了 Flags 属性,则串联每个有效项的字符串值并将各值用逗号分开。如果未设置 Flags 属性,则将无效值显示为数字项。

F 或 f

如有可能,将枚举项显示为字符串值。如果值可以完全显示为枚举项的总和(即使未提供 Flags 属性),则串联每个有效项的字符串值并将各值用逗号分开。如果值不能完全由枚举项确定,则将值格式化为整数值。

D 或 d

以尽可能短的表示形式将枚举项显示为整数值。

X 或 x

将枚举项显示为十六进制值。按需要将值表示为带有前导零,以确保值的长度最少有八位。

下面的示例定义一个名为 Colors 的枚举,该枚举包含三项:Red、Blue 和 Green。

Visual Basic
Public Enum Colors
   Red = 1
   Blue = 2
   Green = 3
End Enum
public enum Colors{Red = 1, Blue = 2, Green = 3}

定义了枚举后,可以按下面的方式声明实例。

Visual Basic
Dim MyColors As Colors = Colors.Green
Colors MyColors = Colors.Green;

下面的示例使用枚举格式化方法将 DayOfWeek 枚举的字符串、数字和十六进制表示形式赋予字符串 MyString。此代码创建 DayOfWeek 枚举的新实例(名为 MyDays),并为其赋值 Friday。然后,它使用“G”、“F”、“D”和“X”格式化字符串将不同的枚举表示形式赋予 MyString

Visual Basic
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".
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值