如何正确实例化一个元组类型?

时间:2019-03-14 13:26:46

标签: c# dictionary collections enums tuples

具有这些枚举 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>
                {

                }
            }
        },

    };

是否存在一种明确的良好实践方法来实例化元组字典的值?

3 个答案:

答案 0 :(得分:2)

已经建议您不要在这里使用元组,我同意,但是要回答您的问题,语法非常简单:

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 :(得分:1)

似乎一门课程会更适合您的需求。您可以创建一个名为Report的类,其中包含您的List<ReportField>List<ReportDimension>属性。

当您需要将短暂的,相对较小的值或对象集合视为一件事情(即从方法返回)时,Tuples非常有用,但是为该对象创建专用类的成本并不高这些类型的东西。正如丹尼尔·A·怀特(Daniel A. White)在您的注释部分中指出的那样,这会使您的代码更难阅读,并且鉴于您不需要出于任何目的创建类的太多理由,我想说任何理由都足够好。 / p>

答案 2 :(得分:0)

您可以通过调用Tuple t = Tuple.Create(object1, object2);创建一个元组对象,然后可以通过t.Item1来获取object1的值,而使用t.Item2来获取object2的值