2017-01-20 59 views
0

正如您所看到的,我正在嘗試初始化包含動態數組的動態數組的字典。有人能給我一個更乾淨的方式來做到這一點?必須有一種方法可以用for循環來做到這一點。C#初始化包含動態數組的動態數組的字典

// 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() } 
    } 
}); 
+1

爲什麼你甚至使用'dynamic'?您可以爲此創建強類型,併爲代碼添加類型安全性。你也在每個數組中添加相同的值2x,並且每個數組都是前一個數組的精確副本(它們都是相同的)。最後,爲什麼你使用單值列表,爲什麼不使用'string'或'decimal'而不是'List '和'List '? – Igor

+0

最內層的動態數組是否總是用相同的值初始化,如你所示? – gunnerone

回答

2

不知道爲什麼你使用的動力,但你可以做這樣的:

創建一個函數來創建你的內心,最有活力的陣列中的一個:

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個參數。另外,如果所有最內層的動態數組都將具有相同的內容,則可以進一步簡化它。