Запись в (возможно) трёхмерный Dictionary - table.Open[1, “2”] = 3

208
24 апреля 2018, 00:52

Здравствуйте, товарищи. Задание - создать класс таблицы и записать значение в ячейку в виде

var table = new Table<int, string, double>();
table.Open[1, "2"] = 3;

То есть (как я понял) есть некоторое поле которому мы в скобках передаём координаты (строка, столбец) и записываем туда значение.

Не знаю как это сделать перепробовал много вариантов. Посоветовали сделать Open полем класса, который гэттером возвращает экземпляр другого класса у которого перегружены индексаторы, но я пробовал не получалось. Как говорится, будьте так добры, помогите кто чем может.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
    public class Table<ROW, COL, CELL>
    {
        public Dictionary<KeyValuePair<int, string>, double> Open;
        public Table()
        {
            Open = new Dictionary<KeyValuePair<int, string>, double>();
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            var table = new Table<int, string, double>();
            table.Open[1, "2"] = 3;  /*Ошибка 'No overload for method 'this' 
                                       takes 2 arguments' Подчеркнуто 
                                       красным. */
        }
    }
}
Answer 1

Имхо, задание мне непонятно, но я покажу пример такого индексатора (Руководство).

Создадим класс, добавим в него индексатор и свойство Open (это свойство я добавил только, чтобы можно было вызвать синтаксис из задания)

public class Table<I, J, K>
{
    private Dictionary<I, Dictionary<J, K>> _dict = new Dictionary<I, Dictionary<J, K>>();
    public Table<I, J, K> Open
    {
        get { return this; }
    }
    public K this[I arg1, J arg2]
    {
        get { return _dict[arg1][arg2]; }
        set
        {
            if (!_dict.ContainsKey(arg1))
                _dict.Add(arg1, new Dictionary<J, K>());
            _dict[arg1][arg2] = value;
        }
    }
}

Использование

var table = new Table<int, string, int>();  
table.Open[1, "2"] = 3; 
READ ALSO
Привязка элементов в ComboBox

Привязка элементов в ComboBox

Не могу понять, где у меня ошибка с привязкой элементов к ComboBox

199
C# WPF запрет запуска копий приложения

C# WPF запрет запуска копий приложения

как запретить запуск новых копий приложения? если оно уже запущено то фокус на окно или развернуть

226
Использование сервисов в ASP.NET MVC

Использование сервисов в ASP.NET MVC

Есть задание, в котором необходимо написать Интернет магазин с использованием технологии ASPNET MVC

191
ASP NET MVC и статическая коллекция

ASP NET MVC и статическая коллекция

Пользователи обращаются на сайтКонтроллеры используют async/await

166