2011-11-09 2 views
1

をゼロ次のコードはnullになりますか?オブジェクト[] <Interface>リターンのリストを表示するには、

var obj = GetList() as List<IProxy>; 

しかし、以下のコードは、リストを返します。

object {System.Collections.Generic.List<Person>} 
+2

'一覧は' _not_ 'かかわらずIProxyに人の関係の'一覧です。 stackoverflow(これは、共分散か対共分散か)に関するこれに関する質問のヒープがあります。 (GetList()リストとして).Cast (); ' – Rob

答えて

5

List<Person>List<IProxy>異なる2つです:のVisual Studioのウォッチパネルで

var obj = GetList() as List<Person>; 

、私のタイプは、次のように報告されます1つを別のものに変換すると、nullが返される可能性があります。

GetList().OfType<IProxy>() 

あなたが望むことをします。コレクションが含まれている場合、それは例外をスローしませんので、あなたはまた、異種の種類が

Covariance and Contravariance FAQ

私はOfTypeを好む個人的に

GetList().Cast<IProxy>() 

を使用することができ、あなたの質問の多くを答えることがあります。

+1

質問のコメントに示唆したように、OfType ()の代わりにキャスト()を使用する方が良いです。実際、OfType ()は、IProxyタイプではないすべての要素を除外しています。この場合、結果は同じですが、一般的ではありません。 objが本当にリストである必要がある場合、正しい式はGetList()です。キャスト().ToList() – Teudimundo

+0

@Teudimundo ..おめでとう...私は私の答えと理性を編集しました –

+0

ありがとう。私はこれを行ってFAQを読む – Darbio

1

List<People>List<IProxy>とは異なるタイプです。あなたはclass Cat : IProxyだったと想像してください。 List<People>List<IProxy>にキャストできたら、それにはCatを追加することができます。これは望ましくないと思われます。欠落しているものは、ここでは一般的な反差異です。たとえば、JavaではリストをList<? extends IProxy>に正当にキャストすることができます。これにより、リストからIProxy個のオブジェクトを読み込むことはできますが、何も書き込むことはできません。

+0

ありがとうサイモン。実際には、異なるタイプのIProxyアイテムのリストを追加する必要があります。上記のコードは、私が論理をテストするために作った抽象である(質問をより簡単にする)。 – Darbio

+0

'List 'の複数のインスタンスを統合して、 'T'が同じではなく常に' IProxy'を実装する必要がある場合、 'proxies = new List ();'リストを作成して 'プロキシ 'を呼び出すことができます。 AddRange(人); proxies.AddRange(otherProxyTypeList); 'など。 – phoog

-2

返品タイプがGetList()の場合objectの理由は何ですか? List<Person>またはIList<Person>を指定すると意味があります。そうすれば、メソッドを呼び出した後にキャストする必要はありません。

あなたの方法からList<IProxy>をしたい場合は、あなたがこれを行うだろう:

List<IProxy> GetList() 
{ 
    List<IProxy> people = new List<IProxy>(); 

    people.Add(new Person()); 
    people.Add(new Person()); 

    return people; 
} 

その後、

var obj = GetList(); 
+1

これは当てはまりますが、質問には答えません。 – Amy

+0

これは当てはまりますが、リフレクションを使用して、実行時にオブジェクトのすべてのプロパティを返します。値は、厳密に型指定されたリストではなく、オブジェクトとして返されます。 – Darbio

+0

@JDあなたが投稿したコードサンプルからはわかりませんでした。これは、リストを作成してオブジェクトとして返すメソッドを示しています。 – phoog

関連する問題