Non riesco ad accedere alla proprietà Count dell'array ma attraverso il casting su ICollection!

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

  •  06-07-2019
  •  | 
  •  

Domanda

        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

Hai una spiegazione per questo?

È stato utile?

Soluzione

Le matrici hanno .Lunghezza, non .Count.

Ma questo è disponibile (come implementazione esplicita dell'interfaccia ) su ICollection ecc.

Essenzialmente, lo stesso di:

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

Bar non ha una proprietà Foo pubblica, ma è disponibile se si esegue il cast su IFoo :

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

Altri suggerimenti

Mentre System.Array implementa l'interfaccia ICollection , non espone direttamente la proprietà Count . Puoi vedere l'implementazione esplicita di ICollection.Count nella documentazione MSDN qui .

Lo stesso vale per IList.Item .

Dai un'occhiata a questo post sul blog per maggiori dettagli sull'implementazione esplicita e implicita dell'interfaccia: Implementazione implicita ed esplicita dell'interfaccia

Anche se questo non risponde alla tua domanda direttamente , se stai usando .NET 3.5 puoi includere lo spazio dei nomi;

using System.Linq;

che ti consentirà quindi di utilizzare un metodo Count (), simile a quando esegui il casting del tuo array int come ICollection.

using System.Linq;

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

Quindi hai anche tutta una serie di belle funzioni che puoi usare anche in Linq :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top