¡No puedo acceder a la propiedad Count de la matriz sino a través de la conversión a ICollection!
-
06-07-2019 - |
Pregunta
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
¿Tienes una explicación para eso?
Solución
Las matrices tienen .Length, no .Count.
Pero esto está disponible (como implementación de interfaz explícita ) en ICollection, etc.
Esencialmente, lo mismo que:
interface IFoo
{
int Foo { get; }
}
class Bar : IFoo
{
public int Value { get { return 12; } }
int IFoo.Foo { get { return Value; } } // explicit interface implementation
}
Bar
no tiene una propiedad pública Foo
, pero está disponible si se envía a IFoo
:
Bar bar = new Bar();
Console.WriteLine(bar.Value); // but no Foo
IFoo foo = bar;
Console.WriteLine(foo.Foo); // but no Value
Otros consejos
Mientras que System.Array
implementa la interfaz ICollection
, no expone directamente la propiedad Count
. Puede ver la implementación explícita de ICollection.Count
en la documentación de MSDN aquí .
Lo mismo se aplica a IList.Item
.
Consulte esta entrada del blog para obtener más detalles sobre la implementación explícita e implícita de la interfaz: Implementaciones de interfaz implícitas y explícitas
Si bien esto no responde a su pregunta directamente , si está utilizando .NET 3.5 puede incluir el espacio de nombres;
using System.Linq;
que luego le permitirá utilizar un método Count (), similar a cuando convierte su matriz int como ICollection.
using System.Linq;
int[] arr = new int[5];
int int_count = arr.Count();
También tienes una gran cantidad de buenas funciones que también puedes usar en Linq :)