2012-04-09 15 views
1

背景:私はタイプDirectoryCollection<T>のジェネリックコレクションを持っており、TはタイプIEntityでなければならないと指定しました。私は具体的なタイプEntityを持っていて、IEntityと、2つの派生タイプ、EmployeeStationを実装しています。 .NET 4.0では継承されたオブジェクトのコレクションをメソッドに渡す方法基底オブジェクトのICollectionを受け入れる

私は、しかし、それはそれはタイプICollection<Entity>のパラメータを持つメソッドのために動作しないようです、DirectoryCollection<Employee>としてIEnumerable<Entity>パラメータでメソッドを呼び出すために(from here)可能であることを知っています。この方法では、私はRemoveAddのコレクションのメソッドを使用しているので、IEnumerableをメソッドのシグネチャに入れることを躊躇しています。

この問題を解決するベストプラクティスは何ですか?

+0

'DirectoryCollection'は' ICollection'を実装していますか?私は推測していない? –

+0

@ChrisShainは 'ICollection'ではなく、' ICollection ここでT:IEntity' –

+0

@MichaelKingsmillと 'ICollection ここでT:IEntity'とすることはできません。おそらくTは入出力型です。 ? –

答えて

0

DirectoryCollectionクラスにICollectionを実装する必要があります。 @SamHolderがコメント内で言及している共分散の制限のため、明示的に実装する必要があるかもしれません。インターフェイスを明示的に実装する場合は、this tutorialを参照してください。

さらに、ICollection<Entity>をパラメータとして受け入れる方法では、代わりにICollection<IEntity>を受け入れるように署名を変更する必要があります。

+0

私の問題はジェネリックコレクションと無関係であることが判明しましたが、提案された手順はメソッドに渡されるジェネリックコレクションを取得するのに十分でした。ありがとう! –

関連する問題