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
你有没有为一个解释?
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
你有没有为一个解释?
数组有。长度,不.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
虽然System.Array
实现ICollection
接口,它不直接暴露Count
属性。 你可以看到明确的实施ICollection.Count
MSDN文档中的位置 。
这同样适用于IList.Item
。
就拿看对显性和隐性的接口实现更多的细节此博客条目: 隐式和显式接口实现
虽然这并不直接回答你的问题,如果你使用的是.NET 3.5,你可以包括命名空间;
using System.Linq;
然后将允许您使用COUNT()方法,类似于您铸造int数组作为ICollection的时候。
using System.Linq;
int[] arr = new int[5];
int int_count = arr.Count();
你还那么有很好的功能一大堆,你可以在LINQ的使用太:)