[英]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.