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
Do you have an explanation for that?
Arrays have .Length, not .Count.
But this is available (as an explicit interface implementation ) on ICollection etc.
Essentially, the same as:
interface IFoo
{
int Foo { get; }
}
class Bar : IFoo
{
public int Value { get { return 12; } }
int IFoo.Foo { get { return Value; } } // explicit interface implementation
}
Bar
doesn't have public a Foo
property - but it is available if you cast to IFoo
:
Bar bar = new Bar();
Console.WriteLine(bar.Value); // but no Foo
IFoo foo = bar;
Console.WriteLine(foo.Foo); // but no Value
While System.Array
implement the ICollection
interface it doesn't directly expose the Count
property. You can see the explicit implementation of ICollection.Count
in the MSDN documentation here .
The same applies to IList.Item
.
Take look at this Blog entry for more details on explicit and implicit interface implementation: Implicit and Explicit Interface Implementations
Whilst this doesn't answer your question directly , if you are using .NET 3.5 you can include the namespace;
using System.Linq;
which will then allow you to use a Count() method, similar to when casting your int array as an ICollection.
using System.Linq;
int[] arr = new int[5];
int int_count = arr.Count();
You also then have a whole host of nice functions you can use in Linq too :)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.