2011-12-20 12 views
1

私は自分のアプリケーションでsilverlight 4.0を使用しています。私の派生クラスではシルバーライトの共分散の代わりに4.0 IEnumerable <T>

class BaseClass 
{ 
    protected CustomRequest GetCustomRequest(IEnumerable<IRequestType> types) 
    { 
     //Some code here... 
    } 
} 

下に述べたように、私は文を呼び出すにrequestTypesの種類があることをここでエラー

IEnumerable<RequestType> requestTypes = CodeToGetThis(); 
GetCustomRequest(requestTypes) 

注意を取得し、以下のように私は、このメソッドを呼び出すとき、私は私の基本クラスのメソッドを持っていますの派生型IRequestTypeの列挙型です。

これは、c#4.0に共分散が導入されているため、デスクトップアプリケーションでうまく機能します。しかし、Silverlight 4.0の場合、IEnumerableインターフェイスでは行われていないようです。

だから私の銀色アプリケーションでこれを使用するべきである最良の代替アプローチは何ですか?

私は、メソッドオーバーロードを使用して行うことができますが、これを行う方法がわかりません。

UPDATE:私は質問の最初のドラフトで逃した ことの一つは、私はそれゆえ私のために困難になり、各派生タイプのオーバーロードされたメソッドをcraeating IRequestTypeの多くの派生型を持つことになり、です。

答えて

1

各項目をインターフェースにキャストするだけです。

IEnumerable<IRequestType> requestTypes = CodeToGetThis().Select(x => (IRequestType)x); 
GetCustomRequest(requestTypes) 

あなたは、メソッドのオーバーロードで何かをし、あなたの派生/コンクリートの種類を取ったが、あなたは上記のみのようなものをやって、過負荷で元のメソッドを呼び出すに終わるだろう方法を持つことができます。

+0

ありがとうございました。私はこれを試して、これは動作します。 これはオーバーロードよりも優れたアプローチだと思いますか? – Maheep

+0

これは、あなたのオーバーロードされた方法でこれを行う必要があります。オーバーロードによってコードが綺麗になり、このメソッドを呼び出すインスタンスがたくさんある場合は、それを実行します。それが1または2であれば、おそらくオーバーキルです。 –