ICollection vs ICollection - Ambiguïté entre ICollection .Count et ICollection.Count

StackOverflow https://stackoverflow.com/questions/1552456

  •  20-09-2019
  •  | 
  •  

Question

Note: Ceci est similaire, mais pas tout à fait la même chose que cette autre question

J'ai mis en place une interface IBusinessCollection. Il dervies à la fois ICollection<T>, et l'ancien Busted ICollection non générique. Je préfère jeter juste le vieux ICollection Busted, mais j'utilise WPF databinding avec un CollectionView qui me veut mettre en œuvre les vieux Busted IList non générique: - (

De toute façon, les interfaces ressemblent à ceci:

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

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

public interface ICollection
{ int Count { get; } }

En raison de l'utilisation d'injection de dépendance, je passe autour des objets de type IBusinessCollection<T> en utilisant leurs interfaces, pas par types de béton, donc j'ai quelque chose comme ceci:

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

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

Lorsque je tente et appelle ce code, je reçois une erreur, comme suit:

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

Il y a 3 façons de faire de cette compilation, mais tous sont laids.

  1. Couler la classe à sa mise en œuvre concrète (qui je sais pas)

  2. Couler la classe explicitement ICollection

  3. Couler la classe explicitement ICollection<T>

Y at-il une quatrième option qui ne me demande pas de jeter les choses du tout? Je peux faire tous les changements que je dois IBusinessCollection<T>

Était-ce utile?

La solution

Cela semble résoudre les problèmes dans mes tests rapides.

public interface IBusinessCollection<T> : ICollection<T>, ICollection
{
    new int Count { get;  }
}

Autres conseils

ICollection<string> counter = Factory.Get();
counter.Count; // No longer ambiguous
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top