Frage

        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

Haben Sie eine Erklärung dafür?

War es hilfreich?

Lösung

Arrays haben .Length, nicht .Count.

Das ist aber vorhanden (als explizite Schnittstellenimplementierung ) auf ICollection etc.

Im Wesentlichen das gleiche wie:

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

Bar hat nicht öffentlich eine Foo Eigenschaft - aber es ist verfügbar, wenn Sie auf IFoo Stimmen:

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

Andere Tipps

Während System.Array den ICollection Schnittstelle implementieren ist es nicht direkt die Count Eigenschaft aus. Sie können die explizite Implementierung von ICollection.Count in der MSDN-Dokumentation hier .

Das gleiche gilt für IList.Item.

Nehmen Sie für weitere Informationen über explizite und implizite Schnittstellen-Implementierung in diesem Blog-Eintrag aussehen: Implizite und explizite Schnittstellenimplementierungen

Während dies nicht beantwortet Ihre Frage direkt , wenn Sie .NET 3.5 verwenden, können Sie den Namespace enthalten;

using System.Linq;

die dann können Sie einen Count () -Methode, ähnlich wie verwenden, wenn Ihr int Array als ICollection Gießen.

using System.Linq;

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

Sie haben auch dann eine ganze Reihe von netten Funktionen, die Sie in Linq verwenden:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top