IList<T> と List の両方を拡張するインターフェイスを実装するコレクションがあります。
public Interface IMySpecialCollection : IList<MyObject>, IList { ... }
つまり、2 つのバージョンのインデクサーがあるということです。
一般的な実装を使用したいので、通常どおり実装します。
public MyObject this[int index] { .... }
シリアライゼーションには IList バージョンのみが必要なので、明示的に実装して隠しておきます。
object IList.this[int index] { ... }
ただし、私の単体テストでは、次の
MyObject foo = target[0];
コンパイラ エラーが発生する
次のメソッドまたはプロパティ間の呼び出しがあいまいです
これには少し驚いています。私は以前にそれをやったと信じており、うまく機能しています。ここで何が欠けていますか?IList<T> と IList を同じインターフェイス内に共存させるにはどうすればよいですか?
Edit IList<T> はIList を実装していないため、シリアル化のために IList を実装する必要があります。回避策には興味がありません。不足しているものを知りたいです。
もう一度編集: インターフェイスから IList を削除して、クラスに移動する必要がありました。インターフェイスを実装するクラスは最終的に Xaml にシリアル化されるため、IDictionary または IList を実装するコレクションが必要になるため、これを行いたくありません...