7

注:これは似ていますが、この他の質問とはまったく同じではありません

IBusinessCollectionインターフェイスを実装しました。ICollection<T>それは、、および古いバストの非ジェネリックの両方から派生しICollectionます。古いバストをダンプしICollectionたいのですが、CollectionViewでWPFデータバインディングを使用しているので、古いバストの非ジェネリックを実装する必要がありますIList:-(

とにかく、インターフェースは次のようになります。

public interface IBusinessCollection<T> : ICollection<T>, ICollection
{ }

public interface ICollection<T>
{ int Count { get; } }

public interface ICollection
{ int Count { get; } }

依存性注入を使用しているため、具体的な型ではなくIBusinessCollection<T>、インターフェイスを使用して型のオブジェクトを渡しているので、次のようになります。

internal class AnonymousCollection : IBusinessCollection<string>
{ 
    public int Count { get { return 5; } }
}

public class Factory
{
    public static IBusinessCollection<string> Get()
    { return new AnonymousCollection(); }
}

このコードを呼び出そうとすると、次のようなエラーが発生します。

var counter = Factory.Get();
counter.Count; // Won't compile
// Ambiguity between 'ICollection<string>.Count' and 'ICollection.Count'

これをコンパイルする方法は3つありますが、どれも醜いです。

  1. クラスを具体的な実装にキャストします(私は知らないかもしれません)

  2. クラスを明示的にキャストするICollection

  3. クラスを明示的にキャストするICollection<T>

キャストする必要がまったくない4番目のオプションはありますか?必要な変更を加えることができますIBusinessCollection<T>

4

2 に答える 2

12

これは私のクイックテストの問題を解決するようです。

public interface IBusinessCollection<T> : ICollection<T>, ICollection
{
    new int Count { get;  }
}
于 2009-10-12T03:08:15.547 に答える
-1
ICollection<string> counter = Factory.Get();
counter.Count; // No longer ambiguous
于 2009-10-12T03:04:51.813 に答える