2011-06-29 13 views
0

私は確かにどこかの答えがありますが、私は検索で間違った用語を使っていますので、必然的に重複していることを前もってお詫びします。構造とは反対ですか?

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つの答えが必要です(申し訳ありません)...事前に感謝!

答えて

1
Public Function GetResults(Of T As Class) As T 
+0

ありがとう@Max、私はそれが何か簡単だろうと思っていました。 Annoyingly私は、私の例では、GetResultsの正確なオーバーロードが呼び出されるだろうと仮定していましたが、実際にはそれらはすべてオブジェクトバージョンに渡されます(実装されていない型のすべてをキャッチすることを意図しています)。決して少ない、決して私が後であったどの荒々しいキーワードを最終的に知るのに、まだ役立つ、ありがとう – Smudge202

関連する問題