2015-05-07 5 views
1

Это может быть очень простой вопрос, но на самом деле он не знает, как это сделать. Я хочу создать следующее:Сделайте свой собственный массив

public class MyArray 
{ 
    List<KeyValuePair<int, object>> myList = new List<KeyValuePair<int, object>>(); 

    public void Set_Value(int index, object value) 
    { 
     myList = myList.Where(a => a.Key != index).ToList(); 
     myList.Add(new KeyValuePair<int, object>(index, value)); 
    } 
    public object Get_Value(int index) 
    { 
     if (myList.Any(a => a.Key == index)) return myList.FirstOrDefault(a => a.Key == index).Value; 
     else return null; 
    } 
} 
class Program 
{ 
    static void Main(string[] args) 
    { 
     MyArray array = new MyArray(); 
     array[0] = "Hello world!"; 
    } 
} 

Сделать массив, который я сам управлять ...

+0

Какая у вас проблема с реализацией массива? – Servy

+0

Извините, это дубликат, я не смог найти его в google ... – ikwillem

+0

Спасибо за ответ – ikwillem

ответ

1

Вы можете добавить оператор индекса к классу:

public object this[int index] 
{ 
    get 
    { 
     if (myList.Any(a => a.Key == index)) return myList.FirstOrDefault(a => a.Key == index).Value; 
     else return null; 
    } 
    set 
    { 
     myList = myList.Where(a => a.Key != index).ToList(); 
     myList.Add(new KeyValuePair<int, object>(index, value)); 
    } 
} 

Обратите внимание, что у вас есть несколько возможности улучшить ваш код; Я просто копировал/вставлял его, чтобы показать механику оператора индекса.

0

Я думаю, что вы спрашиваете, как вы перегружаете оператор индексатора.

Для этого, смотрите здесь: How do I overload the [] operator in C#

Однако, я бы не советовал воссоздание колеса здесь. Вероятно, лучше использовать массив или наследовать из класса коллекции.

+0

Если вы чувствуете, что на какой-либо вопрос отвечает другой вопрос, вы должны пометить/проголосовать, чтобы закрыть его как дубликат, а не публиковать ответ со ссылкой на дублированный вопрос. – Servy