私は確かにどこかの答えがありますが、私は検索で間違った用語を使っていますので、必然的に重複していることを前もってお詫びします。構造とは反対ですか?
CType関数を使用します。明らかに、指定されたオブジェクトを指定された参照型にキャスト(または少なくとも試行)できます。
CType(myObject, Integer)
...はコンパイラエラーを生成します。つまり、構造体にキャストしようとすると関数は機能しません。これは、私は、ジェネリックを扱うときに最も頻繁にアップ作物と確信している:
Public Function GetResults(Of T)() As T
Dim instance As T
Return CType(GetData(instance), T)
End Function
Public Function GetData(ByVal param As myClass) As myClass
'do stuff
Return param
End Function
Public Function GetData(byval param As Integer) As Integer
'do stuff
Return param
End Function
Public Function GetResults(ByVal param As Object) As Object
Throw New NotImplementedException
End Function
はおそらく例の最高うまくいけば、私が何を意味するかを示していません。以下は動作します:
Dim result = GetResult(Of myClass)
以下は、私は例外を使用しての大ファンではないんだctype関数
Dim result = GetResult(Of Integer)
に失敗します/のtry-catchをロジックを適用することができれば、私はできたがそうCTypeを試してみてください。私はむしろ、別のコードを使ってそれをルーティングする方法を見つけるでしょう。私が知っているジェネリックスで知っている
Public Function GetResults(Of T As Structure) As T
逆の回答は何ですか? CTypeが失敗しないように参照型のみを必要としています... T構造体をプレーンでTとオーバーロードすることはできません。なぜなら、それらは同じシグネチャだと考えているからです。 ^^
長い質問ですが、おそらく1つの答えが必要です(申し訳ありません)...事前に感謝!
ありがとう@Max、私はそれが何か簡単だろうと思っていました。 Annoyingly私は、私の例では、GetResultsの正確なオーバーロードが呼び出されるだろうと仮定していましたが、実際にはそれらはすべてオブジェクトバージョンに渡されます(実装されていない型のすべてをキャッチすることを意図しています)。決して少ない、決して私が後であったどの荒々しいキーワードを最終的に知るのに、まだ役立つ、ありがとう – Smudge202