Индексатор со словарем

Я не могу продолжить работу с приведенным ниже кодом. Кто-нибудь может помочь?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Demo_Inidexers
{
    public class MyIndexer
    {
        Dictionary <int,string >  testdctnry = new Dictionary<int,string>()  ;
        public string this[int index,string val ]
        {
            get 
            {
                string temp;
                if (index > 0)
                    MessageBox .Show ("Hey m Zero");
                return testdctnry[index];
            }
            set
            {
                if (index > 1)
                    MessageBox.Show("Setting up");
                testdctnry.Add(index, val);
            }
        }
    }
    static class Program
    {

        static void Main()
        {
            MyIndexer MI = new MyIndexer();

        }
    }
}

Как в приведенном выше коде я могу использовать как индексатор, так и словарь. Я очень новичок в С#, пожалуйста, помогите. Я хочу понять индексатор.


person Viku    schedule 13.02.2014    source источник
comment
Какова цель класса в первую очередь? Dictionary уже имеет индексатор. Просто используйте это.   -  person Servy    schedule 13.02.2014


Ответы (2)


Значение для установки индексатора не должно использоваться в качестве второго аргумента. У get просто нет доступа к установленному значению, так как его нет. В методе set есть контекстное ключевое слово value, значение которого установлено для индексатора:

public class MyIndexer
{
    private Dictionary <int,string> testdctnry = new Dictionary<int,string>();
    public string this[int index]
    {
        get 
        {
            if (index > 0)
                MessageBox.Show("Hey m Zero");
            return testdctnry[index];
        }
        set
        {
            if (index > 1)
                MessageBox.Show("Setting up");
            testdctnry[index] = value;
        }
    }
}
person Servy    schedule 13.02.2014

Какая у вас проблема?

Вы вызываете индексаторы, вызывая obj[args]. Чтобы использовать геттер, вы используете obj[args], как если бы это было значение. Чтобы использовать сеттер, вы используете obj[args] в левой части присваивания.

http://msdn.microsoft.com/en-us/library/6x16t2tx.aspx

person user3288049    schedule 13.02.2014