Примечание: это похоже, но не совсем так же, как этот другой вопрос
Я реализовал IBusinessCollection
интерфейс. Это дериваты как от ICollection<T>
, так и от неработающего старца ICollection
. Я бы предпочел просто сбросить старый отключенный ICollection
, но я использую привязку данных WPF с CollectionView, который хочет, чтобы я реализовал старый отключенный неуниверсальный IList
: - (
В любом случае, интерфейсы выглядят так:
public interface IBusinessCollection<T> : ICollection<T>, ICollection
{ }
public interface ICollection<T>
{ int Count { get; } }
public interface ICollection
{ int Count { get; } }
Из-за использования Dependency Injection я передаю объекты типа 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 способа сделать этот компилятор, но все они безобразны.
Приведите класс к его конкретной реализации (чего я не знаю)
Приведите класс явно к ICollection
Приведите класс явно к ICollection<T>
Есть ли четвертый вариант, который вообще не требует от меня кастовать вещи? Я могу внести любые необходимые изменения в IBusinessCollection<T>