vb.net – 直接和Ctype与枚举的区别
发布时间:2020-12-17 00:10:21 所属栏目:大数据 来源:网络整理
导读:Public Enum Fruit Red_Apple = 1 Oranges Ripe_BananaEnd EnumPrivate Sub InitCombosRegular() Dim d1 As New Dictionary(Of Int16,String) For Each e In [Enum].GetValues(GetType(Fruit)) d1.Add(CShort(e),Replace(e.ToString,"_"," ")) Next ComboBox
Public Enum Fruit Red_Apple = 1 Oranges Ripe_Banana End Enum Private Sub InitCombosRegular() Dim d1 As New Dictionary(Of Int16,String) For Each e In [Enum].GetValues(GetType(Fruit)) d1.Add(CShort(e),Replace(e.ToString,"_"," ")) Next ComboBox1.DataSource = d1.ToList ComboBox1.DisplayMember = "Value" ComboBox1.ValueMember = "Key" ComboBox1.SelectedIndex = 0 End Sub 'This fails Dim combo1 = DirectCast(ComboBox1.SelectedValue,Fruit) ' Fails 'these both work Dim combo2 = DirectCast(CInt(ComboBox1.SelectedValue),Fruit) 'works Dim combo3 = CType(ComboBox1.SelectedValue,Fruit) 'works 为什么CType工作和DirectCast不具有相同的语法?然而,如果我在SelectedCast之前将selectedValue转换为int,那么它可以工作 问候 _Eric
原因是因为CType和DirectCast是根本不同的操作.
DirectCast是VB.Net中的一个转换机制,只允许CLR定义的转换.它比C#版本的转换更具限制性,因为它不考虑用户定义的转换. CType是一个词汇投射机制.它考虑CLR规则,用户定义的转换和VB.Net定义的转换.简而言之,它将做任何事情,一切可能的话,创建一个对象到指定类型的有效转换. 在这种特殊情况下,您尝试将值转换为没有CLR定义的转换的枚举,因此它的失败. VB.Net运行库却能够找到一个词法转换来满足问题. 关于差异的体面讨论存在于这里: > http://msdn.microsoft.com/en-us/library/aa289509(VS.71).aspx#vbtchmicrosoftvisualbasicnetinternalsanchor10 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |