2

私は奇妙な状況にいます。私は互いに派生する恐ろしい数のクラスを持っており、さまざまなコレクションにオブジェクトを保存しています。

たとえば、次のようになります。

Record <-- CostRecord <-- AccruedCostRecord
                      <-- PrepaidCostRecord
                      <-- StockRecord

オブジェクトは List(Of Record) に格納されており、特定のリストで特定のタイプのレコードを検索したいと考えています。

    Private Function findRecord(listToSearch As List(of Record), recordName As String, recordType As Type) As Record
        For i As Integer = 0 To listToSearch.Count - 1
            If listToSearch(i).name.equals(recordName)
                'If record is of type "recordType" then return it
            End If
        Next
    End Function

基本クラスの型にも関心があるため、通常は「TypeOf ... Is」演算子を使用します。したがって、「CostRecord」を渡した場合、AccruedCostRecord、PrepaidCostRecord、または StockRecord を取得することが期待されます。

この場合、System.Type を引数として受け入れないため、TypeOf を使用できません。また、必要なものを伝える別の方法が思いつきません。

基本クラスに興味があるので、ここでも「GetType」が役立つとは思いません。

誰にもアイデアはありますか?おそらくある種のクレイジーな反射魔法でしょうか?

ありがとう

4

3 に答える 3

1

.IsAssignableFromタイプでメソッドを使用できます。

If recordType.IsAssignableFrom(listToSearch(i).GetType())

たとえば、リスト アイテムがAccruedCostRecordであり、recordTypeがであるCostRecord場合、これは を返しTrueます。

于 2013-11-06T09:48:42.433 に答える