我(显然是错误的)假设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
type?
The ToString
方法是一个标准的公共方法,它返回一个String
。这是一个由基础定义的方法Object
类型为可覆盖。因此,每个类都可以重写该方法以返回它想要的任何内容。类重写是很常见的ToString
方法使其返回对象的可读性良好的描述。
CStr
另一方面,是铸造操作员。它是简写CType(x, String)
。与许多其他运算符一样,强制转换运算符可以被任何类覆盖。不过,通常情况下,您希望转换操作返回原始对象实际值的最接近表示,而不是描述性字符串。
那么,您可能想要的情况并不罕见ToString
返回与以下不同的结果CStr
。对于枚举来说,每个成员本质上都是一个整数,所以CStr
在枚举成员上的作用与CStr
在一个整数上。这正是您所期望的。然而,ToString
已被覆盖以返回更易于人类阅读的值版本。这也是您所期望的。
这是一个覆盖两者的类的示例CStr
and 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)