У меня есть коллекция, которая реализует интерфейс, который расширяет как IList < T>, так и List.Как решить двусмысленность вызова между Generic.IList <T> .this [] и IList.this []?
public Interface IMySpecialCollection : IList<MyObject>, IList { ... }
Это означает, что у меня есть две версии индексатора.
Я желаю родовая реализация, которые будут использоваться, поэтому я реализую, что один обычно:
public MyObject this[int index] { .... }
Мне нужна только версия IList для сериализации, поэтому я реализую его в явном виде, чтобы держать его скрытый:
object IList.this[int index] { ... }
Однако в моих модульных тестов, следующий
MyObject foo = target[0];
результаты в ком штабелер ошибка
Вызов неоднозначен между следующими методами или свойствами
Я немного удивлен этим; Я считаю, что сделал это раньше, и все работает нормально. Что мне здесь не хватает? Как я могу заставить IList < T> и IList сосуществовать в одном интерфейсе?
Редактировать IList < T> делает не реализации IList, и я должен осуществлять IList для сериализации. Меня не интересуют обходные пути, я хочу знать, чего мне не хватает.
Редактировать снова: Мне пришлось отказаться от IList из интерфейса и перенести его на мой класс. Я не хочу этого делать, поскольку классы, реализующие интерфейс, в конечном итоге будут сериализованы для Xaml, для чего требуются коллекции для реализации IDictionary или IList ...
Могу ли я спросить, как вы сериализации пользовательских индексатор? Когда я пытался индексировать пользовательский индекс (для WCF), я получаю сообщение с желтым экраном ASP, в котором говорится, что пользовательские индексы не могут быть сериализованы. В конце концов я просто отказался от этой идеи. –