をゼロ次のコードはnullになりますか?オブジェクト[] <Interface>リターンのリストを表示するには、
var obj = GetList() as List<IProxy>;
しかし、以下のコードは、リストを返します。
object {System.Collections.Generic.List<Person>}
をゼロ次のコードはnullになりますか?オブジェクト[] <Interface>リターンのリストを表示するには、
var obj = GetList() as List<IProxy>;
しかし、以下のコードは、リストを返します。
object {System.Collections.Generic.List<Person>}
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>()
を使用することができ、あなたの質問の多くを答えることがあります。
質問のコメントに示唆したように、OfType
@Teudimundo ..おめでとう...私は私の答えと理性を編集しました –
ありがとう。私はこれを行ってFAQを読む – Darbio
List<People>
はList<IProxy>
とは異なるタイプです。あなたはclass Cat : IProxy
だったと想像してください。 List<People>
をList<IProxy>
にキャストできたら、それにはCat
を追加することができます。これは望ましくないと思われます。欠落しているものは、ここでは一般的な反差異です。たとえば、JavaではリストをList<? extends IProxy>
に正当にキャストすることができます。これにより、リストからIProxy
個のオブジェクトを読み込むことはできますが、何も書き込むことはできません。
返品タイプが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();
'一覧は' _not_ 'かかわらずIProxyに人の関係の'一覧です。 stackoverflow(これは、共分散か対共分散か)に関するこれに関する質問のヒープがあります。 (GetList()リストとして).Cast (); ' –
Rob