¡No puedo acceder a la propiedad Count de la matriz sino a través de la conversión a ICollection!

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

  •  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?

¿Fue útil?

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 :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top