2013-07-02 3 views
-1

Наш класс Учитель дал нам программу на Indexers(), когда я скомпилирован и выполнение программы в моем компьютере я получил ошибку вИндексаторы (Smart массив)

Error:1 Operator '<' cannot be applied to operands of type 'int' and 'method group'

Почему я получаю эту ошибку ?? .. .and Объясните логику программы и почему используются индекторы, и я также получаю Ошибка выполнения
Индекс оказался за пределами допустимого диапазона. Должен быть неотрицательным и меньше размера коллекции
. Имя параметра: индекс

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Collections; 
    namespace ConsoleApplication2 
    { 
     class Program 
     { 
      ArrayList array = new ArrayList(); 
      public object this[int index] 
      { 
       get 
       { 
        if (index < 0 || index >= array.Count) 
        { 
         return (null); 
        } 
        else 
        { 
         return (array[index]); 
        } 
       } 
       set 
       { 
        array[index] = value; 
       } 
      } 
     } 
     class Demo 
     { 
      public static void Main() 
      { 
       Program p = new Program(); 
       p[0] = "123"; 
       p[1] = "abc"; 
       p[2] = "xyz"; 
       for (int i = 0; i <p.Count ; i++) 
       { 
        Console.WriteLine(p[i]); 
       } 
      } 
     } 
    } 
+3

Где вы ожидаете 'p.Count' приехать из? –

+0

@Jon: Странно, что сообщение об ошибке вызывает 'p.Count' a _method group_. 'class Program' не имеет метода' Count'. – Vlad

+1

Что такое p.Count? метод? Если это так, 'i joe

ответ

4

Это неудача, потому что компилятор не может найти свойство с именем Count. Вместо этого он нашел способ —, который не показан здесь, или если Program реализует IEnumerable<object>, то это, скорее всего, метод расширения Linq Count.

Попробуйте добавить Count свойство Program

class Program 
{ 
    ... 

    public int Count 
    { 
     get { return this.array.Count; } 
    } 
} 

Это позволит решить ошибку компилятора. Если вы хотите узнать , почему это indexers & hellip; я полагаю, потому что ваш учитель хотел показать, как их можно использовать. Индексаторы всего лишь немного syntactic sugar, которые просто делают код записи p.GetItem(i) выглядят чище, p[i].

2

Я не вижу в вас программу исполнения графа. Добавьте реализацию Count и попробуйте повторно скомпилировать.

class Program 
    { 
     ArrayList array = new ArrayList(); 

     public int Count { get { return array.Count; } } 

     public object this[int index] 
     { 
      get 
      { 
       if (index < 0 || index >= array.Count) 
       { 
        return (null); 
       } 
       else 
       { 
        return (array[index]); 
       } 
      } 
      set 
      { 
       array[index] = value; 
      } 
     } 
    } 
1

Вы должны добавить графу собственности и конструктор, который инициализирует ваш ArrayList до нужного размера, как это:

class Program 
{ 
    ArrayList array = null; 

    public Program(int size) 
    { 
     array = new ArrayList(size); 
    } 

    public object this[int index] 
    { 
     get 
     { 
      if (index < 0 || index >= array.Count) 
      { 
       return (null); 
      } 
      else 
      { 
       return (array[index]); 
      } 
     } 
     set 
     { 
      array[index] = value; 
     } 
    } 

    public int Count 
    { 
     get 
     { 
      return array.Count; 
     } 
    } 
} 
+0

Какой у вас tzpe все zour * Y * как * Z *? –

+0

@ p.s.w.g Ха-ха. Извините, изменил раскладку клавиатуры, не заметив :-) –