2009-06-23 1 views

ответ

6

Массивы имеют. Длина, не.

Но это доступно (как явной реализация интерфейса) на 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 
3

В то время как System.Array реализует интерфейс ICollection, он непосредственно не выставляет Count. Вы можете увидеть явную реализацию ICollection.Count в документации MSDN here.

То же самое применимо к IList.Item.

Take взгляд на эту запись для получения более подробной информации о явной и неявной реализации интерфейса: Implicit and Explicit Interface Implementations

1

Хотя это не отвечает на вопрос непосредственно, если вы используете .NET 3.5 вы можете включать пространство имен;

using System.Linq; 

, который затем позволит вам использовать метод Count(), аналогичный при заливке ИНТ массив как ICollection.

using System.Linq; 

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

Вы также затем целый ряд приятных функций, которые вы можете использовать в Linq тоже :)

+1

.. который будет O (N) вместо O (1) – VVS

+3

@VVS - вы неверны , Enumerable.Count() проверяет ICollection , используя .Count внутри. –

+0

@Marc: Ах, сегодня узнал что-то новое. – VVS

Смежные вопросы