Je ne peux pas accéder à la propriété Count du tableau mais par le biais de la conversion vers ICollection!

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

  •  06-07-2019
  •  | 
  •  

Question

        int[] arr = new int[5];
        Console.WriteLine(arr.Count.ToString());//Compiler Error
        Console.WriteLine(((ICollection)arr).Count.ToString());//works print 5
        Console.WriteLine(arr.Length.ToString());//print 5

Avez-vous une explication à cela?

Était-ce utile?

La solution

Les tableaux ont une longueur, pas un nombre.

Mais ceci est disponible (en tant que implémentation d'interface explicite ) sur ICollection, etc.

Essentiellement, identique à:

interface IFoo
{
    int Foo { get; }
}
class Bar : IFoo
{
    public int Value { get { return 12; } }
    int IFoo.Foo { get { return Value; } } // explicit interface implementation
}

La barre n'a pas de propriété publique Foo - mais elle est disponible si vous convertissez en IFoo :

    Bar bar = new Bar();
    Console.WriteLine(bar.Value); // but no Foo
    IFoo foo = bar;
    Console.WriteLine(foo.Foo); // but no Value

Autres conseils

Bien que System.Array implémente l'interface ICollection , il n'expose pas directement la propriété Count . Vous pouvez voir l'implémentation explicite de ICollection.Count dans la documentation MSDN ici .

Il en va de même pour IList.Item .

Consultez cette entrée de blog pour plus de détails sur la mise en œuvre d'interface explicite et implicite: Implémentations d'interface implicites et explicites

Bien que cela ne réponde pas directement à votre question , , vous pouvez inclure l'espace de noms si vous utilisez .NET 3.5;

.
using System.Linq;

qui vous permettra ensuite d'utiliser une méthode Count (), similaire à la conversion de votre tableau int en ICollection.

using System.Linq;

int[] arr = new int[5];
int int_count = arr.Count();

Vous avez également toute une série de fonctions utiles que vous pouvez également utiliser dans Linq:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top