Vb.net 处理枚举类型时,将CStr()与.ToString进行比较
我(显然是错误地)假设Cstr(某物)等同于Vb.net 处理枚举类型时,将CStr()与.ToString进行比较,vb.net,Vb.net,我(显然是错误地)假设Cstr(某物)等同于某物 我想将枚举类型作为字符串保存,似乎根据我使用的转换方法,我可以获取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) Handle
某物
我想将枚举类型作为字符串保存,似乎根据我使用的转换方法,我可以获取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
类型的不同元素?本文将详细解释CStr()接受哪种类型的表达式。总结:
- 生成布尔值的表达式,转换为“真”或“假”
- 生成日期时间的表达式,转换为短日期时间格式
- 生成数字类型的表达式,转换为表示数字的字符串
请注意,它没有枚举类型的项目符号。编译器总是乐于将枚举值转换为整数。所以第三个项目符号适用,这就是为什么会得到“0” ToString
方法是一个标准的公共方法,它返回一个字符串
。它是一种由基对象
类型定义为可重写的方法。因此,每个类都可以重写该方法以返回它想要的任何内容。类重写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-另外-我用来获取枚举名称的代码是正确的
vehicleType.Car.ToString
?+1非常好-再次感谢。没有意识到CStr、CInt…等
是CType
的简短版本。很抱歉我的格式设置。我想提供一个在一个类中同时覆盖这两个方面的例子,但是我在车里打电话,所以太难了。我以后会设法把它修好(除非有人想帮我一把,先帮我修好:)……史蒂夫,不要着急,我期待着更多的信息SO
在车内的手机上……SO
是危险的上瘾!!哈这是一个有趣的心理形象!不,我妻子在开车。我的右脚骨折了,所以戴着石膏不能开车。但是,如果我是开车的话,我可能仍然会有冲动去打字,比如说演员超载。我可能让我妻子帮我打字了!。。。喜欢你的风格,史蒂文。p、 你好像没有圣诞帽?