Как правильно создать экземпляр типа Tuple? - PullRequest
0 голосов
/ 14 марта 2019

Имея эти перечисления ReportType, ReportField and ReportDimension со следующей спецификацией:

По сути, у меня есть три типа отчетов, и каждый из них является своего рода уникальным, один поддерживает некоторые поля ReportFields и некоторые параметры ReportDimensions (не имеет значениякоторый), я хотел бы создать словарь, который имеет 3 элемента KeyValuePair (для каждого типа отчета) и имеет кортеж в качестве значения, которое выглядит следующим образом:

private readonly Dictionary<ReportType, (List<ReportField>, List<ReportDimension>)> _reportTypeDimensionMappings;

Я хотел непосредственно создать экземпляр этой структуры, но путьЯ намереваюсь, дает мне ошибки сборки:

private readonly Dictionary<ReportType, (List<ReportField>, List<ReportDimension>)> _reportTypeDimensionMappings = new Dictionary<ReportType,
        (List<ReportField>, List<ReportDimension>)>
    {
        {ReportType.Session, new (List<ReportField>, List<ReportDimension>)
            {
                new List<ReportField>
                {

                },
                new List<ReportDimension>
                {

                }
            }
        },

    };

Есть ли явный эффективный способ создания экземпляра значения словаря Tuple?

Ответы [ 3 ]

2 голосов
/ 14 марта 2019

Уже было предложено, чтобы вы не использовали здесь Tuple, и я согласен, но, чтобы ответить на ваш вопрос, синтаксис довольно прост:

private readonly Dictionary<ReportType, (List<ReportField>, List<ReportDimension>)> _reportTypeDimensionMappings = 
    new Dictionary<ReportType, (List<ReportField>, List<ReportDimension>)>
    {
        {ReportType.Session, (new List<ReportField>(), new List<ReportDimension>()) }
    };
1 голос
/ 14 марта 2019

Кажется, что класс лучше подходит для того, что вам нужно.Вы можете создать класс с именем Report, который будет содержать ваши свойства List<ReportField> и List<ReportDimension>.

Кортежи полезны для случаев, когда вам нужно обрабатывать относительно короткий набор значений или объектов с кратким сроком действия.как одна вещь (т.е. возвращение из метода), но на самом деле создание такого класса для этих типов вещей также не требует больших затрат.Как отметил Дэниел А. Уайт в разделе комментариев, это затрудняет чтение вашего кода, и, учитывая, что вам не нужно много причин для создания класса для каких-либо целей, я бы сказал, что любая причина достаточно хорошая.

0 голосов
/ 14 марта 2019

Вы можете создать объект Tuple, вызвав Tuple t = Tuple.Create(object1, object2);, затем вы можете получить значения t.Item1 для object1 и t.Item2 для object2

...