2015-11-04 2 views
0

В моем проекте мне нужен «сдвинутый» список. В принципе у меня есть public class dyn_int : List<int>, чтобы поддержать некоторые из наших старых сценариев (написанных на собственном языке, но «полуавтоматический переведенный» на C#)Оператор индекса переопределения для смещения

На этом языке, списки начали свои индексы с 1, а не с 0!

В настоящее время я пытаюсь создать удобный API, чтобы наши разработчики все еще могли использовать стиль, с которым они знакомы.

Я, однако, застреваю при создании оператора индекса. Вот моя текущая реализация индекса-доступа для списков. Геттер отлично работает, но я не уверен, что делать с заданным методом. Я пока не нашел метод List.SetElementAt(key, value).

public class dyn_int : List<int> 
{ 
    public int this[int key] 
    { 
     get 
     { 
      return this.ElementAt(key-1); 
     } 
    } 
} 
+1

'Геттер отлично работает' ... Вы пробовали' dyn_int [0] '? – Jonesopolis

+5

Я бы настоятельно рекомендовал вам использовать композицию, а не наследование здесь (и начать следовать соглашениям об именах .NET). Дайте вашему классу 'List ' * variable * вместо того, чтобы выводить из 'List ' и сделать ваш класс реализованным 'IList ' ... хотя даже это будет «интересно» с учетом ожиданий индексатора. –

+1

Вы также не должны использовать 'ElementAt' для получения элементов из списка. Вы повторяете всю последовательность, чтобы получить этот узел. – Servy

ответ

1

Вот быстрый тест linqPad. Вам нужно будет обработать некоторые ошибки и т. Д., Но это должно заставить вас идти.

void Main() 
{ 
    var list = new CustomList<int>(); 
    list.Add(1); 
    list.Add(2); 

    list[1] = 5; 
    list[1].Dump(); //output 5 
} 

public class CustomList<T> 
{ 
    IList<T> list = new List<T>(); 

    public void Add(T item) 
    { 
     list.Add(item); 
    } 

    public T this[int index] 
    { 
     get 
     { 
      return list[index - 1]; 
     } 
     set 
     { 
      list[index - 1] = value; 
     } 
    } 
} 
+0

Я уже пробовал это решение (функция add). Тем не менее, я искал способ использовать индексы также для установки элементов напрямую. – stklik

+0

Затем просто добавьте сеттер. Я обновил ответ. –

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