我(显然不正确)认为Cstr(something)
相当于something.ToString
我希望得到一个枚举类型作为字符串,它似乎取决于我使用的转换方法我得到enum
的索引或名称:
Public Enum vehicleType
Car
Lorry
Bicycle
End Enum
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox("Index is " & _
CStr(vehicleType.Car) & _
".Name is " & _
vehicleType.Car.ToString)
End Sub
End Class
为什么这些转换为字符串返回enum
类型的不同元素?
答案 0 :(得分:5)
ToString
方法是返回String
的标准公共方法。它是一种由基础Object
类型定义为可重写的方法。因此,每个类都可以覆盖该方法以返回它想要的任何内容。类重写ToString
方法以使其返回对象的良好的人类可读描述是很常见的。
CStr
是一个铸造操作员。它是CType(x, String)
的简写。像许多其他运算符一样,转换运算符可以被任何类重写。但是,通常情况下,您希望转换操作返回原始对象的实际值的最接近表示,而不是描述性字符串。
然后,您可能希望ToString
返回与CStr
不同的结果。对于枚举,每个成员本质上都是一个整数,因此枚举成员上的CStr
与整数上的CStr
的作用相同。这就是你所期望的。但是,已覆盖ToString
以返回值更人性化的版本。这也是你所期望的。
以下是覆盖CStr
和ToString
的类的示例:
Public Class MyClass
Public Overrides Function ToString()
Return "Result from ToString"
End Function
Public Shared Widening Operator CType(ByVal p1 As MyClass) As String
Return "Result from cast to String"
End Operator
End Class
答案 1 :(得分:1)
这个MSDN Library article详细解释了CStr()接受的表达式。总结:
请注意,它没有枚举类型的项目符号。编译器总是乐于将枚举值转换为整数。所以第3个子弹适用,这就是你得到“0”的原因。