我不能访问计数数组的,而是通过铸造ICollection的财产!(I can not access

2019-07-29 03:37发布

        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

你有没有为一个解释?

Answer 1:

数组有。长度,不.Count之间。

但是,这是可用的(如显式接口实现 )上的ICollection等。

从本质上讲,同为:

interface IFoo
{
    int Foo { get; }
}
class Bar : IFoo
{
    public int Value { get { return 12; } }
    int IFoo.Foo { get { return Value; } } // explicit interface implementation
}

Bar没有公众Foo地产-但它若您转换为IFoo

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


Answer 2:

虽然System.Array实现ICollection接口,它不直接暴露Count属性。 你可以看到明确的实施ICollection.Count MSDN文档中的位置 。

这同样适用于IList.Item

就拿看对显性和隐性的接口实现更多的细节此博客条目: 隐式和显式接口实现



Answer 3:

虽然这并不直接回答你的问题,如果你使用的是.NET 3.5,你可以包括命名空间;

using System.Linq;

然后将允许您使用COUNT()方法,类似于您铸造int数组作为ICollection的时候。

using System.Linq;

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

你还那么有很好的功能一大堆,你可以在LINQ的使用太:)



文章来源: I can not access Count property of the array but through casting to ICollection !