2017-05-10 17 views
4

のは、私はこのようなリストを持っているとしましょう:異なるタイプのリストを含むリストを作成する方法

var firstList = new List<ofsometype>(); 
var secondList = new List<ofsomeanothertype>(); 
var thirdList = new List<anothertype>(); 

は、どのように私はこれらのリストを受け入れるリストを作ることができますか?同様

var mainList = new List<???>(); 
mainList.Add(firstlist); 
mainList.Add(secondlist); 
mainList.Add(thirdlist); 

ありがとう。

+2

'List 'を使ってください。しかし、あなたはcast-o-ramaの領域に入ります。 –

+0

よくあるものを実装していない限り、 'List 'しか使用できません。 'List 'は、非汎用インターフェースも実装していますが、あなたが何を目的としているのか分からず、それをどのように使用しようとしているのか、より具体的なアドバイスをするのは不可能です。 –

+0

@ LasseV.Karlsen実際に私は多くの種類のリストをたくさん作成しています。それで全部です。 – jason

答えて

6

私はおそらく代わりに、辞書のコレクションを使用したい:

var firstList = new List<ofsometype>(); 
var secondList = new List<ofsomeanothertype>(); 
var thirdlist = new List<anothertype>(); 

var listsDict = new Dictionary<Type, object>(); 
listsDict.Add(typeof(ofsometype), firstlist); 
listsDict.Add(typeof(ofsomeanothertype), secondlist); 
listsDict.Add(typeof(anothertype), thirdlist); 

ここでの利点は、それはあなたのリストの種類についての情報を与えることです。これは、2つのものを使用することができます:特定のタイプのための

  1. フィルタリストのみ
  2. は、単にキー

P.S.を使用して後でList<object>のためのタイプを知っています

解決策と達成する必要のある項目に応じて、型がわかっている場合はジェネリック型(dynamic)を使用できます。型が不明な場合でも実行時の動的操作はコンパイラタイプを知らない。

+0

私はIList 1のリストにこの答えを好んでいます。これははるかにはっきりと読んで、他の解決法のキャスティング問題をたくさん防ぎます – Dillanm

+0

変換する例を教えてください。 – jason

+0

@Dillanmなぜキャスティングの問題を防ぐのですか?それでもリストをキャストする必要があります。オブジェクトのリストを使用する場合は、オブジェクトをキャストする必要があります。なぜこれがより良い解決策であるかわかりません。 – Maarten

2

異なる種類のリストから項目を追加する場合は、共通の基本クラスを共有するか、同じインターフェースから継承する必要があります。

ofsometype : ISomeInterface 
ofsomeanothertype: ISomeInterface 
anothertype: ISomeInterface 

var firstList = new List<ofsometype>(); 
var secondList = new List<ofsomeanothertype>(); 
var secondList = new List<anothertype>(); 

var mainList = new List<ISomeInterface>(); 
mainList.AddRange(firstlist); 
mainList.AddRange(secondlist); 
mainList.AddRange(thirdlist); 

あなたは、鋳造/反射に頼る場合を除き、リストから項目を取得する際ISomeInterfaceで公開されるメンバへのアクセスに限定されます。

これは、List<object>に追加することによっても達成できますが、リストに含まれている情報の隣には表示されません。

+1

答えをありがとう。 'List 'を使用すると、メインリストを繰り返し、メンバー(さまざまなタイプのリスト)を取得できます。 – jason

+0

@jasonキーをタイプにし、値をIListオブジェクトとするディクショナリを使用するオプションを検討しましたか?リストを取得するときにキャストが少し楽になりますが、特定のタイプのリストが1つしかない場合にのみ機能します。 –

関連する問題