当前位置 : 主页 > 编程语言 > c语言 >

vb.net – CStr()在处理Enum类型时与.ToString进行比较

来源:互联网 收集:自由互联 发布时间:2021-06-24
我(显然不正确)假设Cstr(某事物)等同于某事.ToString. 我希望得到一个枚举类型作为字符串,它似乎取决于我使用的转换方法我得到枚举的索引或名称: Public Enum vehicleType Car Lorry BicycleEnd
我(显然不正确)假设Cstr(某事物)等同于某事.ToString.
我希望得到一个枚举类型作为字符串,它似乎取决于我使用的转换方法我得到枚举的索引或名称:

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

为什么这些转换为字符串返回枚举类型的不同元素?

ToString方法是返回String的标准公共方法.它是一种由基础对象类型定义为可重写的方法.因此,每个类都可以覆盖该方法以返回它想要的任何内容.类重写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
网友评论