Eu não posso acesso propriedade Count da matriz, mas através lançando a ICollection!
-
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?
Solução
As matrizes têm .Length, não .Count.
Mas isso está disponível (como um implementação de interface explícita ??strong>) 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 ??strong> 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:)