Non riesco ad accedere alla proprietà Count dell'array ma attraverso il casting su ICollection!
-
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?
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 :)