Eu não posso acesso propriedade Count da matriz, mas através lançando a ICollection!

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

  •  06-07-2019
  •  | 
  •  

Pergunta

        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

Você tem uma explicação para isso?

Foi útil?

Solução

As matrizes têm .Length, não .Count.

Mas isso está disponível (como um implementação de interface explícita ) no ICollection etc.

Essencialmente, o mesmo 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 não tem a propriedade de um Foo pública - mas está disponível se você escalado para IFoo:

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

Outras dicas

Enquanto System.Array implementar o ICollection interface de não expor a propriedade Count diretamente. Você pode ver o explícita implementação de ICollection.Count na documentação MSDN aqui .

O mesmo se aplica a IList.Item.

Tome olhada nesta entrada de blog para obter mais detalhes sobre a implementação de interface explícita e implícita: implícitas e explícitas implementações de interface

Enquanto isso não responder à sua pergunta diretamente , se você estiver usando o .NET 3.5 você pode incluir o namespace;

using System.Linq;

que irá permitir que você use um método Count (), semelhante a quando lançar sua matriz int como um ICollection.

using System.Linq;

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

Você também, então tem toda uma série de funções muito boas que você pode usar em Linq também:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top