ICollection vs ICollection - Ambiguïté entre ICollection .Count et ICollection.Count
-
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.
-
Couler la classe à sa mise en œuvre concrète (qui je sais pas)
-
Couler la classe explicitement
ICollection
-
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>
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