1

引数としてハッシュテーブルを受け入れるメソッドがあります(はい、時代遅れです..):

public static LuaTable HashtableToLuatable(Hashtable t, int depth = 1)

これは正しく動作します。

ここで、最初のパラメーターとして ArrayList も受け入れたいので、't' に Hashtable と ArrayList の両方の値を持たせることができます。現在、次のように、メソッドを 2 回コピーして貼り付けています。

public static LuaTable ArraylistToLuatable(ArrayList t, int depth = 1)

残りはまったく同じです。

これを合体させる方法もあると思います。

4

5 に答える 5

1

これらの (ひどく時代遅れの) タイプは両方とも、2 つの共通のインターフェースを実装しています。IEnumerableICollection。したがって、これらのインターフェイスに基づいて一般的な制約を設定できます。

static void ArraylistToLuatable<T>( T collection ) where T : IEnumerable
{
    foreach( var item in collection )
    {
        // do something
    }
}

もちろん、これはまだひどいです。これitemは type になるためです。これは、引数よりも引数objectの方がうまく機能します。カバーの下では、何らかの方法で a を処理する必要があるため、メソッドでその型を確認する必要があることを意味します適切にキャストします。 ArrayListHashTableDictionaryEntryitem

より最新のジェネリック コレクション型を使用できないと確信していますか? DLL から取得するときに、それらをジェネリック コレクションにラップすることは可能でしょうか? この種のものがどれだけあなたの側に必要かによると思います。方法が 1 つまたは 2 つしかない場合は、おそらくこの方法で問題ありません。

于 2012-04-12T17:45:38.697 に答える
0

それがうまくいくなら、ジェネリックを試すことができます..

public static LuaTable <T> HashtableToLuatable(T t, int depth = 1) where T : ICollection

上記が当てはまらない場合は、独自のデータ型を派生させることもできます..

于 2012-04-12T17:46:20.157 に答える