簡體   English   中英

C#初始化包含動態數組的字典的字典

[英]C# Initialize Dictionary Containing Dynamic Array of Dynamic Arrays

如您所見,我正在嘗試初始化包含動態數組的字典。 有人可以給我一種更清潔的方法嗎? 必須有一種使用for循環執行此操作的方法。

// Sizes: 20X, 40X, W, M, WM, Other
sizesDict.Add(eDate, new dynamic[6] { // Date, Size
    new dynamic[6] { // Data
        /* RangeMax */
        new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total },
        /* RangeMin */
        new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total },
        /* OriginMax */
        new List<string>  { r.rateEvalDLoc.originLoc.LocationName.ToString() },
        /* OriginMin */
        new List<string>  { r.rateEvalDLoc.originLoc.LocationName.ToString() },
        /* DestinationMax */
        new List<string>  { r.destinationLoc.LocationName.ToString() },
        /* DestinationMin */
        new List<string>  { r.destinationLoc.LocationName.ToString() }
    },
    new dynamic[6] { // Data
        /* RangeMax */
        new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total },
        /* RangeMin */
        new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total },
        /* OriginMax */
        new List<string>  { r.rateEvalDLoc.originLoc.LocationName.ToString() },
        /* OriginMin */
        new List<string>  { r.rateEvalDLoc.originLoc.LocationName.ToString() },
        /* DestinationMax */
        new List<string>  { r.destinationLoc.LocationName.ToString() },
        /* DestinationMin */
        new List<string>  { r.destinationLoc.LocationName.ToString() }
    },
    new dynamic[6] { // Data
        /* RangeMax */
        new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total },
        /* RangeMin */
        new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total },
        /* OriginMax */
        new List<string>  { r.rateEvalDLoc.originLoc.LocationName.ToString() },
        /* OriginMin */
        new List<string>  { r.rateEvalDLoc.originLoc.LocationName.ToString() },
        /* DestinationMax */
        new List<string>  { r.destinationLoc.LocationName.ToString() },
        /* DestinationMin */
        new List<string>  { r.destinationLoc.LocationName.ToString() }
    },
    new dynamic[6] { // Data
        /* RangeMax */
        new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total },
        /* RangeMin */
        new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total },
        /* OriginMax */
        new List<string>  { r.rateEvalDLoc.originLoc.LocationName.ToString() },
        /* OriginMin */
        new List<string>  { r.rateEvalDLoc.originLoc.LocationName.ToString() },
        /* DestinationMax */
        new List<string>  { r.destinationLoc.LocationName.ToString() },
        /* DestinationMin */
        new List<string>  { r.destinationLoc.LocationName.ToString() }
    },
    new dynamic[6] { // Data
        /* RangeMax */
        new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total },
        /* RangeMin */
        new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total },
        /* OriginMax */
        new List<string>  { r.rateEvalDLoc.originLoc.LocationName.ToString() },
        /* OriginMin */
        new List<string>  { r.rateEvalDLoc.originLoc.LocationName.ToString() },
        /* DestinationMax */
        new List<string>  { r.destinationLoc.LocationName.ToString() },
        /* DestinationMin */
        new List<string>  { r.destinationLoc.LocationName.ToString() }
    },
    new dynamic[6] { // Data
        /* RangeMax */
        new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total },
        /* RangeMin */
        new List<decimal> { r.rateEvalDLoc.rateEvalOLoc.charge.Total },
        /* OriginMax */
        new List<string>  { r.rateEvalDLoc.originLoc.LocationName.ToString() },
        /* OriginMin */
        new List<string>  { r.rateEvalDLoc.originLoc.LocationName.ToString() },
        /* DestinationMax */
        new List<string>  { r.destinationLoc.LocationName.ToString() },
        /* DestinationMin */
        new List<string>  { r.destinationLoc.LocationName.ToString() }
    }
});

不知道為什么要使用動力學,但是可以這樣做:

創建一個函數以創建最內部的動態數組之一:

private static dynamic[] GetDataArray(
    decimal rangeMax,
    decimal rangeMin,
    string originMax,
    string originMin,
    string destMax,
    string destMin)
{
    return new dynamic[6] { // Data
        /* RangeMax */
        new List<decimal> { rangeMax },
        /* RangeMin */
        new List<decimal> { rangeMin },
        /* OriginMax */
        new List<string>  { originMax },
        /* OriginMin */
        new List<string>  { originMin },
        /* DestinationMax */
        new List<string>  { destMax },
        /* DestinationMin */
        new List<string>  { destMin }
    };
}

然后調用該函數6次,將每個動態數組添加到最外面的動態數組。 最后,將該數組添加到字典中。

dynamic[] allData = new dynamic[6];
for (int i = 0; i < allData.Length; i++)
{
    allData[i] = GetDataArray(
        r.rateEvalDLoc.rateEvalOLoc.charge.Total,
        r.rateEvalDLoc.rateEvalOLoc.charge.Total,
        r.rateEvalDLoc.originLoc.LocationName.ToString(),
        r.rateEvalDLoc.originLoc.LocationName.ToString(),
        r.destinationLoc.LocationName.ToString(),
        r.destinationLoc.LocationName.ToString());
}

sizesDict.Add(eDate, allData);

如果RangeMax始終等於RangeMin,並且OriginMax == OriginMin,並且DestinationMax == DestinationMin,則可以簡化該函數,使其僅具有3個參數。 同樣,如果所有最里面的動態數組都具有相同的內容,則可以進一步簡化它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM