質問

 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 ない同じ構文?だかキャストの selectedValueint 以前 DirectCast, その作品

について

_Eric

役に立ちましたか?

解決

ありがとうございましたので CTypeDirectCast 根本的に異なる事業です。

DirectCast は鋳造機構VB.Net できるだけCLR定義換。もますます制限のC#版鋳造しないので考えるユーザー定義換。

CType は語彙鋳造機構。ついて考慮をはらいながらCLR規ユーザー定義し、コンバージョンVB.Net 定義換。短で何かを作成することが可能で有効な変換のためのオブジェクトを指定されたタイプです。

この場合に変換する値の列挙型が付けられていないCLR定義の変換があり、したがって、それらの合否もない。のVB.Net 実行しを見つけることができました。る語彙の変換を満たす問題です。

ワ議論の違いが存在する。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top